用递推法编写求Fibonacci 数列前20项的C++程序。Fibonacci 数列为:1,1,2,3,5,8,13,21,…;就是从第三项

2025-01-01 20:55:51
推荐回答(3个)
回答1:

求Fibonacci 数列前20项不需要递归
int Print_Fib_Nums(int size)
{
if(size<1)
return -1;
else if(size ==1){
printf("The first Fibonacci number is 1.\n");
return 0;
}
else if(size == 2){
printf("The first two Fibonacci numbers are 1, 1.\n");
return 0;
}
else{
printf("The first %d Fibonacci numbers are 1, 1,", &size);
if(size ==3){
printf(" 2.\n");
return 0;
}
int pre=1;int cur=1; int next=0;
for(int i=0;i++;i next=pre+cur;
printf(" %d,",&next);
pre=cur; cur=next;
}
next=pre+cur;
printf(" %d.\n",&next);
}
那么Print_Fib_Nums(20)就好了。
但是求Fibonacci数列某一项是要递归的。
int Get_Fibonacci_Num(int index)
{
if(index<1)
return -1;
else if(index ==1)
return 1;
else if(index == 2)
return 1;
else
return Get_Fibonacci_Num(size-2)+Get_Fibonacci_Num(size-1);
}
想要求数列中某项时就可以Get_Fibonacci_Num(n)就好了。
不推荐用这个求Fibonacci数列,因为递归太多次,浪费。迭代就好了。

回答2:

int Fibonacci(int n)
{
if(1 == n || 2==n)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}

printf("the 20th of Fibonacci num is %d",Fibonacci(20));

回答3:

楼上的写的是第20项 而不是前20项
void test2(int max, int cur=1, int a1=0, int a2=0)
{
if (a1+a2 ==0)
{
cout << 1 << endl;
test2(max, ++cur, 0, 1);
return ;
}

cout << a1+a2 < a2 = a1+a2;
a1 = a2-a1;
cur++;
if (cur > max)
{
return ;
}
test2(max, cur, a1, a2);
}

int _tmain(int argc, _TCHAR* argv[])
{
test2(20);
return 0;
}