该程序显示“5”的结果,但我看不出它是如何得到答案的,因为“+1”继续“结果之谜(n / 20)+ 1”
有人可以带我完成计算机采取的逻辑步骤吗?
public class Experimental{
public static int mystery(int n){
if (n <= 0) { return 0; }
return mystery(n / 2) + 1;
}//ends method
public static void main(String[] args){
System.out.println(mystery(20));
}//ends method
}//ends class
答案 0 :(得分:1)
这是一个递归调用。它在n等于零时结束(它永远不会变为负数)。它需要5个除以2才能达到零。你要做的最好的事情是拿一张纸,看看它是如何展开的。
mystery(20/2) + 1 =
(mystery(20/2/2) + 1) + 1 =
((mystery(20/2/2/2) + 1) + 1) + 1 =
(((mystery(20/2/2/2/2) + 1) + 1) + 1) + 1 =
((((mystery(20/2/2/2/2/2) + 1) + 1) + 1) + 1) + 1 =
0 + 1 + 1 + 1 + 1 + 1 = 5
希望这会有所帮助。递归时计算机比人类好得多......
答案 1 :(得分:0)
是的!实际上,诸如gdb
之类的调试器可以指导您完成计算机所采用的逻辑步骤。
-g
标志编译程序。gdb a.out
(或您的计划名称)。gdb cheatsheet
,了解有关如何设置断点和单步执行代码的信息。