Java递归方法

Bob*_*Bob 1 java recursion

如果给出n = 20,则下面的方法返回5.
我的问题是每次迭代1如何递增?

mystery(10) + 1 
= mystery(5) + 2 
= mystery(2) + 3 
= mystery(1) + 4 
= mystery(0) + 5 = 5. 
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*onH 8

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
Run Code Online (Sandbox Code Playgroud)

我们知道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
Run Code Online (Sandbox Code Playgroud)

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

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