C 如何以不同的方式调用递归?

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,

当我运行这段代码时,我得到一个异常,如

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, 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)