【发布时间】:2019-01-25 08:03:18
【问题描述】:
我被打印出来的价值如何?
我知道递归一次又一次地调用自己。据我说,该函数应该返回空,因为该函数在打印之前被调用。 printf 是如何工作的?
recur(int i)
{
if(i<0)
return 0;
recur(--i);
printf("%d",i);
recur(--i);
}
main()
{
recur(2);
}
The output of this program is
-1
0
1
-1
有人能解释一下它是如何工作的吗?
【问题讨论】:
-
我最好的建议是在纸上调试你的代码,同时编写“调用堆栈”(这样你就可以准确地理解它的作用)。书面解释不如自己面对它有效。
-
您的代码不是有效的 C,我怀疑它是产生输出的代码,printf 格式字符串中至少缺少
\n,所以请始终发布minimal reproducible example 和连贯的东西. -
好吧,你必须添加一个
#include <stdio.h>并包含另一个return 0;(并忽略int警告的默认值..) -
我的算法老师总是说不要尝试在纸上“调试”代码,因为它可以在小示例中工作,但大递归示例会导致“精神崩溃”。只要你有停止条件、递归条件和返回,你应该能够调试它并查看值在变化时
-
大约 20 年前,隐式 int 规则已从 C 语言中删除。