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

问题描述 投票:2回答:2

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

c recursion ternary-operator
2个回答
4
投票
int factorial(int n){ return (n > 1) ? n * factorial(n -1) : 1; }

1
投票
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)相同。

© www.soinside.com 2019 - 2024. All rights reserved.