【发布时间】:2016-08-17 05:37:52
【问题描述】:
void func(int num){
if(num< 3){
printf("%d ", num);
func(num+ 1);
printf("%d ", num);
}
}
假设我用 func(0) 调用这个函数。 为什么结果是 0 1 2 2 1 0 ? 我不知道为什么它会减少。
【问题讨论】:
-
随着堆栈展开,前三个数字来自第一个 printf,后三个数字来自第二个 printf。为了更好地了解这一点,请尝试将
"a:%d "和"b:%d "作为格式字符串。 -
是的,我明白了,但为什么它从 2 变为 0,这对我来说没有意义?
-
您的代码什么也不做,因为该函数从未被调用过。
-
试着问问自己,什么时候第二个
printf会在任何迭代中被调用?