求助一个关于递归的程序!
#include<stdio.h>long fun(int n);
int main()
{
int n;
printf("Please input an interger number:");
scanf("%d",&n);
printf("%d! = %ld",n,fun(n));
}
long fun(int n)
{
int f;
if (n < 0)
{
printf("Errow\n");
}
else if (n == 1 || n == 0)
{
f = 1;
}
else
{
f = n * fun(n-1);
}
return f;
}
最后这里 f = n * fun(n-1); 是怎么样的一个运算逻辑呢,没想明白。我是假如n = 3,那么n是会一直在if语句里面判断吗,为什么又不减小到负数;
我这个程序是抄书上打的,我输入负数,求阶乘竟然也能得到阶乘等于0而不是输出error。这里也有疑惑。
本帖最后由 昨非 于 2021-2-20 17:52 编辑
减到n=1的时候:
else if (n == 1 || n == 0)
{
f = 1;
}
就直接返回了,不会减到负数的
if (n < 0)
{
printf("Errow\n");
}只适用于初次输入为负数
昨非 发表于 2021-2-20 17:48
减到n=1的时候:
就直接返回了,不会减到负数的
为啥不会减到负数,大佬能解释下吗。还是说这能这样记住,他就是这样的规则 学编程的盆子 发表于 2021-2-20 17:52
为啥不会减到负数,大佬能解释下吗。还是说这能这样记住,他就是这样的规则
它一只调用
else
{
f = n * fun(n-1);
}
的前提是满足else(也就是n>1)
当n<=1时,进入另外两个分支,不会执行f = n * fun(n-1);
页:
[1]