为什么我的阶乘函数总是返回1?

时间:2019-10-26 22:36:04

标签: c recursion ternary-operator

我正在学习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;
}

您可以在以下链接中看到代码返回1,表示值0到9: https://code.sololearn.com/c7uSnfxw92sl/#c

2 个答案:

答案 0 :(得分:4)

您忘了乘以n

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

答案 1 :(得分:1)

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

begin/end

您的功能已损坏。它不会将n与阶乘(n-1)的结果相乘。您也可以使用累加器来使其变为尾递归,但是您不能仅将其替换为begin/end,因为它的计算结果与always one_statememnt; initial if true_statement else false_statement; initial case (expression) item1: statement1; item2: statement2; item3: statement3; endcase 相同。