C 如何以不同的方式调用递归?
当我运行这段代码时,我得到一个异常,如 ConsoleApplication1.exe中0x779C017E(ntdll.dll)处未处理的异常:0x00000000:操作已成功完成 如果存在此异常的处理程序,则程序可以安全地继续 我怎么修理它??先谢谢你C 如何以不同的方式调用递归?,c,recursion,C,Recursion,当我运行这段代码时,我得到一个异常,如 ConsoleApplication1.exe中0x779C017E(ntdll.dll)处未处理的异常:0x00000000:操作已成功完成 如果存在此异常的处理程序,则程序可以安全地继续 我怎么修理它??先谢谢你 #include<stdio.h> int fn(int n) { if (n == 1) return 1; return fn(n - 1) + fn(n - 2); } int main() { int n,
#include<stdio.h>
int fn(int n) {
if (n == 1)
return 1;
return fn(n - 1) + fn(n - 2);
}
int main()
{
int n, k = 1;
scanf_s("%d",&n);
k = fn(n);
printf("%d", k);
return 1;
}
#包括
内部fn(内部n){
如果(n==1)
返回1;
返回fn(n-1)+fn(n-2);
}
int main()
{
int n,k=1;
扫描频率(“%d”和“&n”);
k=fn(n);
printf(“%d”,k);
返回1;
}
如果n小于3,则可以输入无限递归。
您需要更改您的条件,以检查您的代码是否具有总是导致无限循环的条件(不仅仅是对于
3
)
考虑输入5
<代码>5将分为4
和3
<代码>3将分为2
和1
<代码>2将分为1
和0
。现在,获取0
值的函数将进入无限递归
这样,无论您输入什么值,该值都将分解为0
,最终将导致无限递归。这应在条件检查中处理
你的状况检查应该是
if (n <= 1)
return 1;
如果(n使用此
#include<stdio.h>
int fn(int n) {
if (n == 1 || n == 0)
return 1;
return fn(n - 1) + fn(n - 2);
}
int main()
{
int n, k = 1;
scanf("%d",&n);
k = fn(n);
printf("%d", k);
return 1;
}
你给出了什么输入?我给出了输入5,6,7,8,9,10你是否尝试过使用调试器来确定哪一行代码出现错误?Fwiw,这是你的家庭作业警告:如果这是为了生成斐波那契数,即使使用了正确的布尔比较器,你的基本情况也可能是错误的(这是真正的问题;请参阅下面的答案)现代参考文献中的第一个斐波那契数通常被认为是0
。仔细检查你的教学材料。这是真的,但她说她使用的输入值都在4以上。@Barmar:是的,但最终它们会降到1以下,因为n-2
可以跳过n==1
测试。谢谢@Haris,你的解决方案ion对我很好。@JoyAcharya欢迎:)
if (n == 1 || n == 0)