我已经不知所措了……我理解了更简单的递归示例,但是当遇到棘手的问题时,我却一无所知。这是一个例子。如果有人能说出我的意思我会很高兴。编译器做什么?
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)
之后写上那个字母。