递归
本帖最后由 新学 于 2019-8-5 18:13 编辑这是带你学C课上的递归求阶乘代码
#include <stdio.h>
long fact(int num);
long fact(int num)
{
static long result ;
if(num > 1)
{
result = num * fact(--num); //我将fact(num - 1)换成了fact(--num);
}
else
{
result = 1;
}
// for( result = 1; num > 1; num--)
// {
// result *= num;
// }
return result;
}
int main(void)
{
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
printf("%d的阶乘是:%d\n", num, fact(num));
return 0;
}
为什么我输入5,结果却是24?为什么会少乘个 5 ? 本帖最后由 jackz007 于 2019-8-5 18:58 编辑
num * fac(num - 1) 和 num * fac(-- num) 是不一样的,后者其实和下面语句等效:
num -- ;
num * fac(num) ;
显然和前者不同,这也是楼主本来想计算 5 的阶乘,可是,得到的结果却是 4 的阶乘的根本原因。
页:
[1]