斐波那契递归?

金马尼·吉德瓦尼(Chinmayee Gidwani)

我刚刚开始学习递归。我被要求制作的程序应以术语作为输入,并输出相应的斐波那契数。到目前为止,这是我所拥有的,但是它显示了一个错误。怎么了?

提前致谢!

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;
    }
}
弗洛里安·舍茨(Florian Schaetz)

想象一下您的斐波那契术语为2。会发生什么?

  • 项== 1?错误,请继续...
  • 因此,请尝试致电fibonacci(term-1)(= fibonacci(1))+ fibonacci(term-2)(= fibonacci(0)

好的,fibonacci(term-1)(= fibonacci(1))...

  • 项== 1?正确,返回1

好的,fibonacci(term-2)(= fibonacci(0)

  • 项== 1?错误,因为它为零。而且它仅从那里走下坡路,因为数字变为负数,并且您永远不会进入term == 1。

因此,也许您可​​能想再考虑一下,您的标准是否应该真正等于一个或不同的标准。

作为更详细的技术说明,因为有人已经在注释中提到了它:调用方法时,一些数据存储在所谓的“堆栈”中。例如,如果调用方法A并调用方法B,则(至少)两个方法的数据将存储在堆栈中。如果B再次调用一个方法,该方法又一次,该方法又一次...堆栈将溢出,这是可怕的StackOverflowException在递归方法上获得错误的返回条件时,经常会发生这种情况。

最后一点:除非需要,否则不要执行递归方法。我想您现在需要学习它,但是在将来,请不要忘记递归是一个非常优雅的概念-而是仅在数学中,而不是在编码中,递归会导致某些问题(例如,一种-而递归计算斐波那契是最糟糕的方法)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章