如何知道在这种情况下要编译什么?

时间:2019-01-08 21:07:22

标签: c++

我特别有这个问题,我不知道为什么答案是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,但我不知道为什么。

1 个答案:

答案 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;
}