gpt4 book ai didi

c - 为什么我无法获得数字的阶乘?如果我尝试将 else 语句作为返回产品,我会得到正确的答案

转载 作者:行者123 更新时间:2023-11-30 21:27:21 25 4
gpt4 key购买 nike

我能知道为什么吗?

#include<stdio.h>

int recfac(int );

main()
{
int n,c;
printf("enter a number ...\n");
scanf("%d",&n);
c=recfac(n);
printf("the factorial of %d is %d ",n,c);
}

int recfac(int n)
{
static int prod=1;

if(n>1)
{
prod=prod*n;
n--;
return recfac(n);
}
else
return;

return prod;
}

最佳答案

您的代码存在几个问题

  1. 函数内有一个没有值的 return 语句,即定义为返回类型 int
  2. 您的函数是递归函数,但您正在使用静态变量它将通过调用而存在,使输出无效多个函数调用
  3. 您没有处理函数输入为 0 的情况。这是您想要实现的目标的基本情况。在编写递归函数时,您绝对必须考虑基本情况

代码:

int recfac(int n)
{

/* base case, ends recursive calls */
if(!n) return 1;

return n * recfac(n - 1);

}

测试了此代码here对于情况 1 - 9,它给出了正确的输出。

编辑:此外,当未指定返回类型且没有 return 语句时,main 返回类型默认为 int 类型。您应该包含 return 0; 语句来停止编译器警告。

关于c - 为什么我无法获得数字的阶乘?如果我尝试将 else 语句作为返回产品,我会得到正确的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52524469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com