展開全部
/**
已知Fibonacci數列:1,1,2,3,5,8,……,F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)
*/
#include
#include
typedef long long int int64;
//方法1,遞歸法
int64 Fibonacci(int n)
{
int64 sum;
if(n<=0)
{
printf("參數值e68a84e8a2ad3231313335323631343130323136353331333433616236非法!\n");
exit(-1); //直接終止程序
}
if(n==1 || n==2)
return 1;
else
sum=Fibonacci(n-1)+Fibonacci(n-2);
return sum;
}
非遞歸法
int64 Fibonacci2(int n)
{
int64 a,b,c;
if(n<=0)
{
printf("參數值非法!\n");
exit(-1); //直接終止程序
}
if(n==1 || n==2)
return 1;
a=b=1; ?//對前兩項的值初始化
n=n-2; ?//因為是從第3項開始記次數,所以減2
while(n > 0)
{
c=a+b;
a=b;
b=c;
n--;
}
return c;
}
//測試主函數
int main()
{
int n;
scanf("%d",&n); //輸入n
//printf("F(%d)=%lld\n",n,Fibonacci(n));
printf("F(%d)=%lld\n",n,Fibonacci2(n));
return 0;
}
//示例運行結果
F:\c_work>a.exe
5
F(5)=5
F:\c_work>a.exe
6
F(6)=8
program fibo;var n,i:integer; rs:extended;function fib(m:integer):extended;var a,b:extended;
begin
a:=1;b:=1;if m<=2 then exit(1)else while m>3 do begin
fib:=a+b;a:=b;b:=fib;m:=m-1;end;exit(fib);end;
begin
read(n);writeln(fib(n));end.
擴展資料:
從第二項開始,每個偶數項的平方都比前后兩項之積少1,每個奇數項的平方都比前后兩項之積多1。
如:第二項1的平方比它的前一項1和它的后一項2的積2少1,第三項2的平方比它的前一項1和它的后一項3的積3多1。
(注:奇數項和偶數項是指項數的奇偶,而并不是指數列的數字本身的奇偶,比如從數列第二項1開始數,第4項5是奇數,但它是偶數項,如果認為5是奇數項,那就誤解題意,怎么都說不通)
證明經計算可得:[f(n)]^2-f(n-1)f(n+1)=(-1)^(n-1)