Methods 为什么这个递归方法是这样工作的?

Methods 为什么这个递归方法是这样工作的?,methods,recursion,Methods,Recursion,程序显示了“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 pub

程序显示了“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
公共课堂实验{
公共静态整数神秘(整数n){

如果(nYes!事实上,诸如
gdb
之类的调试器可以引导您完成计算机执行的逻辑步骤

  • 使用
    -g
    标志编译程序
  • 运行
    gdb a.out
    (或您的程序名)
  • Google
    gdb cheatsheet
    获取有关如何设置断点并逐步完成代码的信息

  • 是的!事实上,像
    gdb
    这样的调试器可以引导您完成计算机执行的逻辑步骤

  • 使用
    -g
    标志编译程序
  • 运行
    gdb a.out
    (或您的程序名)
  • Google
    gdb cheatsheet
    获取有关如何设置断点并逐步完成代码的信息

  • 这是一个递归调用。它在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
    

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

    这是一个递归调用。它在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
    

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

    这里的新手太多了,我该如何编译带有“-g”标志的程序?这到底是什么?我该如何执行步骤2?这里的新手太多了,我该如何编译带有“-g”标志的程序?那到底是什么?我该怎么做第二步?到目前为止,我只把它看作是(n/2)部分。它不断地把自己切成两半,直到最后达到0,但是“+1”什么时候起作用?到目前为止,我只把它看作是(n/2)部分。它不断地把自己切成两半,直到最后达到0,但是“+1”是什么时候起作用的进场?太好了。我一解锁该异能,你就有了一张升级票。你也可以接受答案;)太好了。我一解锁该异能,你就有了一张升级票。你也可以接受答案;)