我刚刚开始学习递归。我被要求制作的程序应以术语作为输入,并输出相应的斐波那契数。到目前为止,这是我所拥有的,但是它显示了一个错误。怎么了?
提前致谢!
private void btnFindNumberActionPerformed(java.awt.event.ActionEvent evt) {
int term = Integer.parseInt(txtInputTerm.getText());
int number = fibonacci(term);
txtOutput.setText("Fibonacci number " + term + " is " + number);
}
public int fibonacci (int term) {
if (term == 1) {
return term;
} else {
int number = fibonacci(term-1) + fibonacci(term-2);
return number;
}
}
想象一下您的斐波那契术语为2。会发生什么?
fibonacci(term-1)
(= fibonacci(1)
)+ fibonacci(term-2)
(= fibonacci(0)
)好的,fibonacci(term-1)
(= fibonacci(1)
)...
好的,fibonacci(term-2)
(= fibonacci(0)
)
因此,也许您可能想再考虑一下,您的标准是否应该真正等于一个或不同的标准。
作为更详细的技术说明,因为有人已经在注释中提到了它:调用方法时,一些数据存储在所谓的“堆栈”中。例如,如果调用方法A并调用方法B,则(至少)两个方法的数据将存储在堆栈中。如果B再次调用一个方法,该方法又一次,该方法又一次...堆栈将溢出,这是可怕的StackOverflowException
。在递归方法上获得错误的返回条件时,经常会发生这种情况。
最后一点:除非需要,否则不要执行递归方法。我想您现在需要学习它,但是在将来,请不要忘记递归是一个非常优雅的概念-而是仅在数学中,而不是在编码中,递归会导致某些问题(例如,一种-而递归计算斐波那契是最糟糕的方法)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句