void func(int num){
if(num< 3){
printf("%d ", num);
func(num+ 1);
printf("%d ", num);
}
}
假设我用func(0)调用这个函数。 为什么结果0 1 2 2 1 0? 我不知道为什么它在减少。递归:不明白这个结果
void func(int num){
if(num< 3){
printf("%d ", num);
func(num+ 1);
printf("%d ", num);
}
}
假设我用func(0)调用这个函数。 为什么结果0 1 2 2 1 0? 我不知道为什么它在减少。递归:不明白这个结果
这里有一个堆栈跟踪
f(0)
print 0
f(1)
print 1
f(2)
print 2
f(3) // 3 < 3 == false
print 2
print 1
print 0
好吧很酷,所以我得到为什么3是错误的,它打印出2.但为什么它之后也打印1和0? –
当您在另一个函数(A)中调用函数(B)时,您不会中断函数(A),一旦被调用函数(B)完成,您将它堆叠并返回到函数 – CMPS
哇,谢谢,我从来没有想到过。这清理了很多东西。 –
的前三个数字来自第一个printf,第二三个数字来自于第二个printf作为堆解开。为了更好地理解,请尝试'“a:%d”'和'“b:%d”'作为格式字符串。 – user3386109
是的,我明白了,但是为什么它会从2变为0,这对我没有意义? –
你的代码什么都不做,因为函数从来没有被调用过。 –