递归语句调用另一个递归语句?

Osc*_*r F 0 java recursion static-methods

public class Recursive_Prob
{    
    public static void main(String[] args)    
    {    
        out.print("\f");   
        out.print(m(4));   
    }   
    public static int m(int a)   
    {   
        if (a < 0)    
            return 0;    
        else    
            return m(a-2) + n(a-1);    
    }       
    public static int n(int b)     
    {     
        if (b <= 0)    
            return 0;     
        else     
            return 1 + n(b-1);     
    }       
}    
Run Code Online (Sandbox Code Playgroud)

我有一个问题,询问m在调用方法时输出是什么out.print(m(4));我尝试解决它并且出来了,0但答案是4在我运行代码时.我最终得到了m(a-2)存在0而且那部分是正确的,但使用相同的逻辑,n(a-1)也是0如此清楚我做错了什么.有人可以解释这是如何工作的?

NIN*_*OOP 5

找出答案的最佳方法是绘制递归树.让我尝试 :

                    m(4)
                     /\
                    /  \
                   m(2) \
                   /\   n(3)
                  /  \     \
                 m(0) \     \
                 /\   n(1)  1+n(2)
                /  \    \      \
              m(-2) \  1+n(0)   \
               /   n(-1)   \   1+n(1)
              0       \     0      \   
                       0            \
                                   1+n(0)
                                      \
                                       0
Run Code Online (Sandbox Code Playgroud)

加起来,结果应该是4.