【问题标题】:C recursive program crashes [closed]C递归程序崩溃[关闭]
【发布时间】:2016-04-07 13:14:23
【问题描述】:

我是整个编程领域的初学者,我正在根据一本书进行编程练习。我已经到达了本书的一部分,我应该在其中编写递归函数。一些程序崩溃,我不知道我做错了什么。请比较这两个:

  1. 这应该从键盘读取一个数字并返回数字! (数字的阶乘)。我尝试输入数字后它崩溃了

    #include <stdio.h>
    
    int number, x;
    int factorial (int a);
    
    int main() {
    
    printf("Input a nonnegative whole number: \n");
    scanf("%d", &number);
    
    int x = factorial(number);
    printf("Factorial of %d equals %d", number, x);
    
    return 0;
    }
    
    int factorial (int a){
    if(a=0) {
            return 1;
        } else {
            return a*factorial(a-1);
        }
    }
    
  2. 这应该从键盘读取 n 并返回字符串中第 n 个元素的值。这个不会崩溃。

    #include <stdio.h>
    
    int n;
    int string (int a);
    
    int main() {
    
        printf("Input a nonnegative whole number: \n");
        scanf("%d", &n);
        int x = string(n);
        printf("%d element of the string equals %d", n, x);
    
        return 0;
    }
    
    int string (int a) {
        int value;
        if (a<=1) {
            value = 1;
        } else {
            value = string(a-1) + 2*string(a-2) + 3;
        }
        return value;
    }
    

这两个程序在我看来几乎相同。我无法弄清楚为什么第一个崩溃而第二个没有。请帮忙,提前谢谢。

【问题讨论】:

  • if (a=0) - 仔细看看,缺少一个字符。
  • 是时候学习如何使用调试器了,这对发现这些简单的问题很有帮助。
  • 一些编译器对此发出警告...
  • 哇,好吧,这是一个简单的错误。可悲的是,我没有收到任何警告。非常感谢大家!

标签: c recursion crash


【解决方案1】:

您使用了if(a=0),但这里的等号将 0 分配给 a,而不是比较 a 和 0。 请改用if(a==0)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多