【问题标题】:Why does my factorial function always return 1?为什么我的阶乘函数总是返回 1?
【发布时间】:2020-02-22 19:03:18
【问题描述】:

我正在学习 C,并在返回时使用三元运算符提出了这个单行阶乘函数,但它总是返回 1。

#include <stdio.h>

int factorial(int n){
    return  (n > 1) ? factorial(n -1) : 1;
}

int main() {
    for(int i = 0; i < 10; i++){
        printf("%d factorial is %d\n",i,factorial(i));
    }
    return 0;
}

您可以在此链接中看到代码为 0 到 9 的值返回 1: https://code.sololearn.com/c7uSnfxw92sl/#c

【问题讨论】:

    标签: c recursion ternary-operator


    【解决方案1】:

    你忘了乘以n

    int factorial(int n){
        return (n > 1) ? n * factorial(n -1) : 1;
    }
    

    【讨论】:

      【解决方案2】:

      这很容易,因为我们可以使用替换规则。例如。

      factorial(10);                    // ==
      (10 > 1) ? factorial(10 - 1) : 1  // ==
      (9 > 1) ? factorial(9 - 1) : 1    // ==
      (8 > 1) ? factorial(8 - 1) : 1    // ==
      (7 > 1) ? factorial(7 - 1) : 1    // ==
      (6 > 1) ? factorial(6 - 1) : 1    // ==
      (5 > 1) ? factorial(5 - 1) : 1    // ==
      (4 > 1) ? factorial(4 - 1) : 1    // ==
      (3 > 1) ? factorial(3 - 1) : 1    // ==
      (2 > 1) ? factorial(2 - 1) : 1    // ==
      (1 > 1) ? factorial(1 - 1) : 1    // ==
      1
      

      您的功能已损坏。它不会将 n 与阶乘 (n - 1) 的结果相乘。你也可以用一个累加器来实现它成为尾递归,但你不能只用factorial(n - 1)替换它,因为它的计算方式与factorial(n)不同。

      【讨论】:

        猜你喜欢
        • 2019-05-21
        • 2017-09-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-26
        • 2013-01-09
        • 1970-01-01
        • 2015-04-21
        相关资源
        最近更新 更多