在这个阶乘递归中,“printf”输出2 6 8,无法理解为什么......
#include <stdio.h>
int f(int n)
{
int k;
if (n==1)
return 1;
else
k = n*f(n-1);
printf("%d ",k);
}
int main()
{
f(4);
}
答案 0 :(得分:2)
问题中代码的原始版本是:
int f(int n) {
int k;
if (n == 1)
return 1;
else
k = n * f(n - 1);
printf("%d ", k);
}
int main() {
f(4);
}
此代码具有未定义的行为,因为如果n != 1
没有正确返回值,导致调用代码在其自己的计算中使用不可预测的值。行为未定义,任何事情都可能发生。
添加return
语句修复了此问题。但请注意这些额外的要点:
k
在f
函数中无用。f
应返回1
参数0
。0
中返回main
。以下是修改版本:
#include <stdio.h>
int f(int n) {
if (n <= 1)
return 1;
else
return n * f(n - 1);
}
int main() {
int i;
for (i = 0; i < 10; i++) {
printf("%d! = %d\n", i, f(i));
}
return 0;
}
答案 1 :(得分:1)
你在这里犯了很多错误:
printf("%d ",k);
此行永远不会被执行,因为在任何情况下if() else
子句都将在它之前返回。