我已经不知所措了……我理解了更简单的递归示例,但是当遇到棘手的问题时,我却一无所知。这是一个例子。如果有人能说出我的意思我会很高兴。编译器做什么?

public static char mystery(String s, int n, int m)
{
if (n==1) return s.charAt(m);

char first = mystery(s, n/2, m*2);
char second = mystery(s, n/2, m*2 +1);

System.out.print(first + " " + second + " ");

return first;
}


调用该方法时显示的内容:
谜团(“ fredpass”,5、1)

答案是s s s

我不知道他们如何到达那里...

如果有人可以帮助我解决这个问题,我们将不胜感激。在互联网上的其他地方,他们只解释阶乘-简单的例子。不知道如果在char first = mystery ( blah );中两次调用它然后又在char second = mystery ( blah );中调用它会发生什么

最佳答案

只需手动跟踪呼叫:

mystery(5, 1)
    first = mystery(2, 2)
        first = mystery(1, 4) = 'p'
        second = mystery(1, 5) = 'a'
    second = mystery(2, 3)
        ...


等等。给自己足够的论文来绘制调用堆栈,函数调用的状态以及局部变量的完整图片。例如,在图片中最里面的调用打印“ p a”之后,它返回'p',因此我将在mystery(2, 2)之后写上那个字母。

10-07 20:27