本題要求實現一個計算Fibonacci數的簡單函數,并利用其實現另一個函數,輸出兩正整數m和n(0<m≤n≤10000)之間的所有Fibonacci數。所謂Fibonacci數列就是滿足任一項數字是前兩項的和(最開始兩項均定義為1)的數列。
函數接口定義:
int fib( int n );
void PrintFN( int m, int n );
其中函數fib須返回第n項Fibonacci數;函數PrintFN要在一行中輸出給定范圍[m, n]內的所有Fibonacci數,相鄰數字間有一個空格,行末不得有多余空格。如果給定區間內沒有Fibonacci數,則輸出一行“No Fibonacci number”。
我的代碼:
int fib( int n )
{int f;if (n == 1||n == 2)f = 1;else f = fib(n-1)+fib(n-2);return f;
}
void PrintFN( int m, int n )
{int i = 1,flag = 0;while(fib(i)<=n){if(fib(i)>=m){//flag = 1;if(flag == 0)printf("%d",fib(i));else printf(" %d",fib(i));flag = 1;}i++;}if(flag == 0)printf("No Fibonacci number\n");
}
1.指示變量flag有兩個作用,一是判斷是否有Fibonacci數,二是判斷該Fibonacci數是不是第一次出現,如果是,則直接輸出fib(i),否則前面增加一空格再輸出fib(i)。我用這種方法解決“行末不得有多余空”的要求,猜想方法多多,只是我這只小菜雞想不到。