代码1: -C代码的区别?
int f(int val) {
int x=0;
while(val > 0) {
x = x + f(val--);
}
return val;
}
代码2: -
int g(int val) {
int x = 0;
while(val > 0) {
x= x + g(val-1);
}
return val;
}
是什么在代码f(3)
和g(3)
执行的区别?
Code 1
对我来说很清楚。然后f(3)
将继续调用自己,越来越深,当用于跟踪递归函数的空间被填满时,我们得到堆栈溢出错误。
但是,我其实停留在第二码的执行。我跑了它,并有无限循环。
另外,我还读到val--
可以写成val-1
。那么,我怎么在解释val-1
行时出错,因为他们两人的表现都截然不同。
你得到了一个无限循环,因为'val'的值永远不会改变'g'。你会注意到你曾经调试过它。 – StoryTeller
这是一个很好的例子,纸张调试可以有所帮助。在执行的每一步中,写下所有变量的值并决定接下来会发生什么代码。 –
'val - '和'val-1'是两个完全不同的东西。第一个改变'val'的值,但第二个不改变。 –