java - 为什么这个递归循环等于 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);
}
解决方案
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
推荐阅读
- assembly - 这条指令需要多少指令周期?
- php - Laravel Echo 与 Pusher 支持多个用户
- discord.py - 你如何在 Discord.py 中接收斜线命令?
- r - 3D 条形图,其中条形的深度可视化 R 中的变量
- java - 在 spring-boot 项目之间共享模型和存储库
- javascript - 导航项目链接未正确链接到新页面
- javascript - 如何获取 Keyv 的用户名和密码?
- python - 如何按特定顺序对我的条形值进行排序?
- node.js - 使用 Node、Express、EJS:如何提供 PDF 文件
- visual-studio-code - VSCode 下划线隐藏波浪线