1

该程序显示“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
4

2 回答 2

1

这是一个递归调用。它在 n 等于 0 时结束(它永远不会变成负数)。需要 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

希望这可以帮助。计算机在递归方面比人类好得多......

于 2013-03-14T21:34:05.357 回答
0

是的!实际上,诸如此类的调试器gdb可以带您完成计算机执行的逻辑步骤。

  1. 编译带有-g标志的程序。
  2. 运行gdb a.out(或您的程序名称)。
  3. 谷歌gdb cheatsheet有关如何设置断点和单步调试代码的信息。
于 2013-03-14T21:21:52.507 回答