[在此处输入图像说明] [1] [此处,当我在if(series==0) return 0;
之前使用Fibonacci定义函数中的if(series==1) return 1;
时,斐波那契数列成功打印,但是当我删除此行然后编译程序时将词条输入inout,然后显示类似
Fibonacci.exe停止工作 但是当我添加该行程序成功执行时。发生什么事了。 有人会告诉我 ] [2] 这是我的代码:
#include<stdio.h>
int fibonacci(int); // declaration of fibonacci function.
int main(){
int input_num,i,series=1;
printf("Enter the term you want to print fibonacci series : ");
scanf("%d", &input_num);
printf("\n Fibonacci Series Are : ");
for(i=0; i<input_num; i++){
printf("%d,", fibonacci(series));
series++;
}
return 0;
}
//defination of fibonacci function
int fibonacci(int series){
if(series==1) return 1;
return(fibonacci(series-1)+fibonacci(series-2));
}
答案 0 :(得分:1)
if (series==1) return 1;
这样的问题是,您还用series-2
调用了该函数,因此该函数可以小于一个。替换为:
if (series<=1) return 1;
另请参阅“防御性编程”
答案 1 :(得分:1)
每个递归函数都需要某种基本条件来收敛。
在Fibonacci程序中,该函数被递归调用两次fibonacci(n-1)
和fibonacci(n-2)
。这有两种基本情况,这就是为什么必须同时检查0和1的原因。
示例:fibonacci(3)==> fibonacci(1)+ fibonacci(2)
fibonacci(2)==> fibonacci(1)+ fibonacci(0)
if(series==0) return 0;
else if(series==1) return 1;
else return(fibonacci(series-1)+fibonacci(series-2));