【发布时间】:2021-05-15 14:54:01
【问题描述】:
我正在编写两个计算阶乘的程序。 program #1 的返回值类型为 void,program #2 的返回值类型为 int。
但我缺乏知识,所以我不知道哪个是对的。
哪个是正确的?
program #1 - 返回值类型:void
#include <stdio.h>
void calculateFactorial(int count, int *sum);
int main()
{
int number;
int sum = 1;
printf("factorial number: ");
scanf(" %d", &number);
calculateFactorial(number, &sum);
printf("result: %d\n", sum);
return 0;
}
void calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return;
}
*sum *= count;
calculateFactorial(--count, sum);
}
program #2 - 返回值类型:int
#include <stdio.h>
int calculateFactorial(int count, int *sum);
int main()
{
int number;
int sum = 1;
printf("factorial number: ");
scanf(" %d", &number);
calculateFactorial(number, &sum);
printf("result: %d\n", sum);
return 0;
}
int calculateFactorial(int count, int *sum)
{
if (count == 0)
{
return *sum;
}
*sum *= count;
calculateFactorial(--count, sum);
}
【问题讨论】:
-
第二个是错误的,因为你不返回任何值,所以函数必须有 void 返回类型。您的编译器一定发出了一些警告。
-
@anastaciu 谢谢。我有一个问题,这不是递归函数吗?因此,为了转义递归函数,我尝试通过创建单独的条件语句而不在函数末尾返回来返回它。即便如此,是否确定没有返回值?
-
첫 번째는 꼬리 재귀 함수이고, 두 번째는 일반적인 재귀 함수이다。 재귀함수는가독성을을주지만,스택에데이터를쌓기쌓기에에스택오버플로우해야해야해야해야해야해야해야해야해야해야해야해야해야때문때문때문에에해야해야해야해야 꼬래 재귀 함수란, 재귀 함수의 가독성은 그대로 유지하되 단점을 보완한 재귀 함수이다。 이때, 컴파일러가 꼬리 재귀 최적화 기능을 제공해야만 하며, 그렇지 않다면 둘 다 별로이다。
-
它是一个递归函数,如果你在最后添加一个条件语句,很可能不是所有的路径都返回一个值。递归函数可以有
void的返回类型,你还有停止条件,缺少的返回会由函数自动完成,是IMO的最佳选择。