Methods 为什么这个递归方法是这样工作的?
程序显示了“5”的结果,但我不知道它是如何得到这个答案的,因为“+1”进行了“结果之谜(n/20)+1” 有人能告诉我计算机获取这些信息的逻辑步骤吗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
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
(或您的程序名)
Googlegdb cheatsheet
获取有关如何设置断点并逐步完成代码的信息
是的!事实上,像gdb
这样的调试器可以引导您完成计算机执行的逻辑步骤
使用-g
标志编译程序
运行gdb a.out
(或您的程序名)
Googlegdb 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”是什么时候起作用的进场?太好了。我一解锁该异能,你就有了一张升级票。你也可以接受答案;)太好了。我一解锁该异能,你就有了一张升级票。你也可以接受答案;)