首页 > 解决方案 > 为什么这个递归循环等于 200?

问题描述

我试图理解为什么这会输出 200,因为我认为每次都会增加 2+ (w-1) 直到 w = 0 - 输出不会更大吗?谢谢!

int w = 100;
public static int mystery(int w)
{
  if (w<=0) {
  return 0;
  }
  return 2+ mystery(w-1);
}

标签: javarecursion

解决方案


mystery(100)调用mystery(99)which calls mystery(98), ..., which calls mystery(1), which calls mystery(0), 递归结束的地方。

即有 101 个调用,每个调用(最后一个返回0除外)都添加2到递归调用返回的值。100 乘以 2 等于 200。

换句话说

mystery(0) returns 0
mystery(1) returns 2 + mystery(0) == 2
mystery(2) returns 2 + mystery(1) == 4
...
mystery(99) returns 2 + mystery(98) == 198
mystery(100) returns 2 + mystery(99) == 200

推荐阅读