为什么我的简单C代码计算阶乘不起作用

问题描述

如果我输入零或负值,以下代码将正确返回。但是,如果我输入任何正值,它将无济于事。
有人可以解释为什么吗?我的期望是,它应该返回正数的阶乘。

#include<stdio.h>

int functionfact(int);

void main()
{
    int x,fact;

    printf("Input an integer value:\n");
    scanf("%d",&x);

    if (x<0)
        printf("Please enter positive value!!");

    else if (x==0)
        printf ("The factorial of 0 is 1");

    else
    {
       fact=functionfact(x);
       printf("The factorial of %d is %d",x,fact);
    }
}

int functionfact(int n)
{
    return(n*functionfact(n-1));
}

解决方法

如Eric所指出的那样,该函数现在无法停止。

只需将功能更改为

int functionfact(int n)
{
    return n > 0 ? (n*functionfact(n-1)) : 1;
}
,

我赞成卡尔比的建议,但我将其写为:

int functionfact(int n)
{
    if (n > 0) {
        return n * functionfact(n-1);
    } else {
        return 1;
    }
}

面对现实:这个问题是由一个正在学习递归基础的初学者提出的。最好的办法是首先全面了解如何处理此类编程(因为我们以前都在为此苦苦挣扎,递归并不容易),只有在此之后,让我们制作一些典型的C oneliners。

,

你好亲爱的!

函数functionfact没有任何终止条件。你可以试试这个...

int functionfact(int n)
    {
        if(n>1)
        return(n*functionfact(n-1));
    }

希望您能得到答案。