#include
int fibonacci(int i)
{
if (i == -1)
return 0;
if (i == 1)
return 1;
return fibonacci(i - 1) + fibonacci(i - 2);
}
int main(int argc, char** argv)
{
int i = 0;
int n = 0;
printf("请输入你要打印的长度:");
scanf("%d", &n);
for (i = 0; i < n; i++)
printf("%d ", fibonacci(i));
return 0;
}
哪里错了啊
当i=2的时候不成立。即n=3时。
使用递归解斐波那契数列题目要初始化两个基线条件,即i = 1时 return 1,i = 2时return 2
或者i = 0时 return 1,i = 1时return 2
在执行fibonacci(0)时就发生错误了。
i=0时会执行 return fibonacci(i - 1) + fibonacci(i - 2);这行代码,然后是一直递归调用,无法跳出来
修改如下,供参考:
#include <stdio.h>
int fibonacci(int i)
{
//if (i == -1) //修改
// return 0; //修改
if (i == 1 || i == 0)//修改
return 1;
return fibonacci(i - 1) + fibonacci(i - 2);
}
int main(int argc, char** argv)
{
int i = 0;
int n = 0;
printf("请输入你要打印的长度:");
scanf("%d", &n);
for (i = 0; i < n; i++)
printf("%d ", fibonacci(i));
return 0;
}