总结:递归写完以后要尽量带回去检验一下。
妄图直接以递归的形式输出斐波那契数列:
#include <stdio.h>
#include <stdlib.h>
int Fibo(int n)
{
if(n==0)
return 0;
if(n==1)
{
printf("%d\t",1);
return 1;
}
else
{
int f = Fibo(n-1)+Fibo(n-2);
printf("%d\t",f);
return f;
}
}
int main()
{
Fibo(20);
return 0;
}
这段代码是错误的,错误在printf函数的使用上,如果把3代入递归就可以看出问题所在,f = Fibo(2)+Fibo(1),此时Fibo(2)继续递归,f = Fibo(0)+Fibo(1),Fibo(1)返回1,Fibo(0)返回0,f=1,没问题,但是会打印一个1(由n=1打印的)。然后到上一层循环,Fibo(2)打印一个1。最后一层,Fibo(1)打印一个1,最后F(3)打印一个2。
结果为:1 1 1 2 明显是有问题的。
正确代码如下:
//返回第n个斐波那契数列的值
int Fibo(int n)
{
if(n==0)
return 0;
if(n==1)
{
return 1;
}
else
{
int f = Fibo(n-2) + Fibo(n-1);
return f;
}
}
int main()
{
int f;
f = Fibo(20);
printf("%d",f);
return 0;
}