【发布时间】:2020-05-11 02:37:18
【问题描述】:
这是代码 sn-p,当使用编号 4 运行时,会输出 2424242448484848288288288288576576576576。不知道为什么退出函数代码后执行会跳回while循环。任何帮助将不胜感激。先感谢您。
#include <stdio.h>
#include <string.h>
int result = 1;
void FirstFactorial(int);
void FirstFactorial(int num) {
// code goes here
while (num > 0) {
result = result * num;
num--;
FirstFactorial(num);
}
printf("%d", result);
}
int main(void) {
int var;
// keep this function call here
printf ("Enter your no.\n");
scanf("%d", &var);
FirstFactorial(var);
return 0;
}
【问题讨论】:
-
因为它是被调用函数中不同的(本地)
num。当递归调用返回时,调用者的 num 仍然只减少一次。而且,随着递归下降,即使函数退出也会打印一个值(没有分隔符)。 -
注意,
int的最大值很可能是 2,147,483,647。这最多允许12!的阶乘。 -
@WeatherVane 当你说不同的数字时,我不明白。你能解释一下吗?
-
@FiddlingBits 是的,我只是在尝试 4!但仍然打印出一些奇怪的东西
-
我不知道你是否掌握了递归,但是假设每次它调用自己时都会给它一个后缀,比如
FirstFactorial_1(int num_1)然后FirstFactorial_2(int num_2)等等。每个都独立于前一个。当每一个结束时,它会将控制权交还给前一个——它不只是停止。并且每一个输出的时候都会打印一条消息,而这些消息都是因为没有换行符而相互碰撞的。
标签: c function recursion while-loop factorial