我特别有这个问题,我不知道为什么答案是30,
int h(int x) {
if (x < 1) {
return 0;
} else {
return x + h(x - 1);
}
}
int main() {
cout << 2 * h(5);
return 0;
}
结果是30,但我不知道为什么。
答案 0 :(得分:1)
因为:
h(5) = 5 + h(4)
= 5 + 4 + h(3)
= 5 + 4 + 3 + h(2)
= 5 + 4 + 3 + 2 + h(1)
= 5 + 4 + 3 + 2 + 1 + h(0)
= 5 + 4 + 3 + 2 + 1 + 0
= 15
然后您打印2 * h(5)
= 2 * 15
= 30
如果您仅阅读代码就无法理解,建议您使用调试器查看执行情况,或添加 printf 进行跟踪
P.S。如您所知,有一种更快的方法:
int h(int x) {
return (x < 1) ? 0
: (x*(x+1))/2;
}