C语言 我是一个初学者程序员,尝试做阶乘的递归方法,所以我想知道这部分代码是否可以递归或不

vsdwdz23  于 2023-02-03  发布在  其他
关注(0)|答案(1)|浏览(77)
#include<stdio.h>
int factorial(unsigned int i);

int main(void)
{
    printf("Fact: %d", factorial(5));
}

int factorial(unsigned int i)
{
    int j;
    int TotalFact;

     /* Termination Condition */
     if(i <= 1)
     {
        return 1;
     }

     /* Body, Recursive Expansion */
     for(j=1; j<i; j++)
         {
            TotalFact=i * factorial(j);
         }
     return TotalFact;
}

我试图用递归方法做阶乘函数,我已经寻找了许多解决方案,然后我试图头脑 Storm 另一个代码,这是我现在张贴,所以它是正确的递归方法??我不想做i * 阶乘(i - 1)

jq6vz3qz

jq6vz3qz1#

递归中不需要for循环,只需返回i * factorial(i - 1)即可。下面是代码,做了一些小改动。

#include<stdio.h>

int factorial(unsigned int i);

int main(void)
{
    printf("Fact: %d", factorial(5));
}

int factorial(unsigned int i)
{
     if(i <= 1)
     {
        return 1;
     }
     else
     {
        return i * factorial(i - 1);
     }
}

正如@Fe023所指出的,这也可以用三元运算符来解决。

int factorial(unsigned int i)
{
     return i <= 1 ? 1 : i * factorial(i - 1);
}

相关问题