【问题标题】:why does this recursive program for factorial not work? [closed]为什么这个阶乘递归程序不起作用? [关闭]
【发布时间】:2017-11-29 13:06:48
【问题描述】:

下面是代码,请准确指出我错在哪里。 我已经声明,定义了函数,我不知道哪里出了问题。

#include<stdio.h>
int factorial(int b); /* Declaration */


int main()
{
    int num;
    printf("Enter number: ");
    scanf("%d", &num);
    printf("%d",factorial(num));
    return 0;
}

int factorial(int b) /*Function definition*/
{

    return b*factorial(b-1);

}

【问题讨论】:

  • 请不要发送带有标签的垃圾邮件。这不是 C#
  • 你做了哪些调试尝试?提示:factorial(0) 的值应该是多少?
  • 相关,根本问题是本网站including this one许多递归问题的直接重复。您没有停止递归链的基本情况。无关,即使在您解决此问题后,我建议您考虑输入-1(或任何负值)的人会出现什么不适,这完全符合您的输入要求。邪恶的东西,来了。
  • "i don't know what is wrong" - 首先确定您认为有什么问题的原因。您有什么实际的问题迹象?
  • 要自己找出问题所在,您可以在程序运行时打印变量以查看程序是否按照您的预期执行。例如,您可以将 printf("factorial called with %d\n", b); 添加到 factorial 函数的开头,您会看到问题所在。使用调试器单步执行代码会更好。

标签: c recursion factorial


【解决方案1】:

你需要在某个时候结束递归:

int factorial(int b) /*Function definition*/
{
    if (b == 0) return 1;
    return b*factorial(b-1);

}

【讨论】:

  • 那么-1...
  • 没有为负数定义因子,因此'unsigned int' 将是更合适的日期类型...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多