【发布时间】:2015-04-22 11:36:22
【问题描述】:
我正在通过 Java 中的一些简单递归练习来理解这个概念(我对此感到困惑)。到目前为止,我的所有研究都非常依赖 Eclipse 的调试器来准确理解我的代码在做什么。但是,当涉及到递归时,我发现情况并非如此,因为很难准确跟踪正在发生的事情。
考虑以下代码,返回nth 斐波那契数的方法:
public int fibonacci(int n) {
if (n == 0 || n == 1) {
return n;
} else {
return fibonacci(n - 1) + fibonacci(n - 2);
}
}
在对这段代码使用调试器时,很难准确地跟踪正在发生的事情以及发生的地点/时间。只有一个变量,它每一步都会改变,而且,对于一个小的n 值,例如 7,它已经变得难以跟踪,因为在最终达到 13 之前执行的步骤太多了.
我想知道:
- 如何以更好的方式(一般而言)调试我的递归代码,以便更好地理解递归?
- 考虑到
return fibonacci(n - 1) + fibonacci(n - 2)的概念很容易理解,我是否过于关注调试这类事情?
【问题讨论】:
-
你试过在一张纸上画出调用结构吗?这可能是了解递归在做什么的好练习。
-
递归方法的输入/输出的简单输出(sysout 或日志)有助于理解恕我直言
-
@RC:请不要通过打印到系统输出来教他调试。我知道有太多的开发人员正是这样做的,这通常会成为生产代码。
-
++ 不仅要理解递归,还要理解调试器。
-
您可能需要仔细查看调用堆栈。Eclipse 允许您选择一个堆栈帧并查看该堆栈帧中变量的值。这对于理解递归很有用。
标签: java eclipse debugging recursion