代码 1:-
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)
的执行有什么区别?
代码 1
对我来说非常清楚。然后f(3)
会不断调用自身,越来越深,当用于跟踪递归函数的空间被填满时,我们会得到堆栈溢出错误。
但是,我实际上陷入了第二段代码的执行。我运行它并得到无限循环。
另外,我读到val--
可以写成val-1
。那么,我在解释 val-1
行时出错了,因为它们的行为完全不同。
最佳答案
val--
相当于 val = val -1
,因此它将 val
的值减 1 并将新值存储为好(递减)。而 val -1
只是减少并返回新值,而不将其存储在变量 val
中(没有实际的递减发生)。这就是为什么你有一个无限循环。我建议进行以下更改:
int g(int val) {
int x = 0;
while(val > 0) {
val = val - 1;
x= x + g(val);
}
return val;
}
这里是关于减量和增量运算符的引用:http://en.cppreference.com/w/cpp/language/operator_incdec
关于c - C代码的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42744404/