【问题标题】:C language recursion factorial not workingC语言递归阶乘不起作用
【发布时间】:2020-08-17 06:41:42
【问题描述】:

对于下面显示的代码,我没有得到任何响应;我在没有条件的情况下保持最小化,例如想象人们会选择正数。它没有给我任何回应:

进程返回 -1073741571 (0xC00000FD) 执行时间:3.194 s

如果我输入 5,答案应该是 120,而不是这里。

#include <stdio.h>
#include <stdlib.h>

int faktorijel(int x) {
    return (x*faktorijel(x-1));
}

main() {
    int a,b;
    printf("Type in a number:");
    scanf("%d\n", &a);
    b=faktorijel(a);
    printf("Result is %d\n", b);
    return 0;
}

【问题讨论】:

  • 无限递归。仔细看看为什么会这样。
  • @njuffa 我学c没睡过,所以我几乎不能看屏幕,但我唯一的猜测是没有下基数。它走向无限的负面
  • 如果你的循环没有终止条件,它将永远循环。同样的原则也适用于递归。你必须有一个停止条件。
  • @tadman tnx 两者,刚刚添加并自行修复。
  • OT:缩进你的代码。

标签: c function recursion


【解决方案1】:

你应该设置停止if:

int faktorijel(int x){
        if (x == 1) {
          return 1;
        } else {
          return (x*faktorijel(x-1));
        }
}

【讨论】:

  • 我刚刚添加了 for 循环,它起作用了。 Tnx 也是如此!
  • 一件事让我很困惑,如果在这里。我读到该函数只会返回一件事。这不会返回 1 而不是我需要的阶乘数吗?因为最终 x 将变为 ==1
  • 这里的基本情况是非标准的。它应该测试x == 0,以便它可以处理0!,即1。如果它不处理这种情况,那将毫无用处,因为它一直在出现。
  • 这是真的!为了控制这一点,情况必须改变。
  • 你也不需要 else (反正你要回来了)
猜你喜欢
  • 2019-10-07
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 2013-09-18
  • 2019-10-22
  • 1970-01-01
相关资源
最近更新 更多