Java递归方法

标签 java recursion

如果你给 n = 20,下面的方法返回 5。
我的问题是每次迭代如何增加 1?

mystery(10) + 1 
= mystery(5) + 2 
= mystery(2) + 3 
= mystery(1) + 4 
= mystery(0) + 5 = 5. 

我在递归方面遇到了一些困难。

public static int mystery(int n){
   if(n <= 0){
        return 0;
   }else{
       return mystery(n / 2 ) + 1;
   }
}

最佳答案

mystery(20) = mystery(10) + 1
mystery(20) = (mystery(5) + 1) + 1
mystery(20) = ((mystery(2) + 1) + 1) + 1
mystery(20) = (((mystery(1) + 1) + 1) + 1) + 1
mystery(20) = ((((mystery(0) + 1) + 1) + 1) + 1) + 1

我们知道 mystery(0) = 0。

mystery(20) = ((((0 + 1) + 1) + 1) + 1) + 1
mystery(20) = (((1 + 1) + 1) + 1) + 1
mystery(20) = ((2 + 1) + 1) + 1
mystery(20) = (3 + 1) + 1
mystery(20) = 4 + 1
mystery(20) = 5

或者,简单地说,我们得到 1+1+1+1+1=5

关于递归的非常好的视频:https://www.youtube.com/watch?v=Mv9NEXX1VHc

关于Java递归方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23812349/

相关文章:

javascript - JS 将数组作为参数传递给递归函数

javascript - JS 数组二分查找中的递归与无递归

java - TCP 套接字数据变得困惑

sql - 递归查询中不允许使用聚合函数。是否有其他方法来编写此查询?

java - 等待网络连接

java - 如何处理大量物体

c - 简单的字符串递归

performance - 尾递归函数总是要避免吗?

java - 如果值不在 ENUM 中,则更改插入值

java - 我的 XML 输出应该是这样的吗?