【发布时间】:2017-03-08 16:27:08
【问题描述】:
斐波那契数列是 0 1 1 2 3 5 8... 等等。它可以使用交换元素并显示它们来获得,而我们可以使用数组来获得它。我被要求在面试中使用递归和它的主要逻辑来找到它,
int fib(int n){
if(n<1)
return 1;
else
return fib(n-1)+fib(n-2);}
因为我们在这里增加了复杂性,所以它会为大数字的堆栈产生问题。那么这里的最佳方式是什么?
【问题讨论】:
-
请发布有效的Java代码或更改标签
-
@LuisMuñoz 此代码是我的 java 程序中的方法。该方法对 java 的无效是什么?
-
使您的代码可以运行更大数字的标准方法是使用很容易在 Java 中实现的 memoization (en.wikipedia.org/wiki/Memoization)。但是——斐波那契数增长得非常快,所以你会很快遇到
int可以容纳的问题,所以你应该改用大整数。另一个想法是让递归辅助函数返回两个连续斐波那契数的pairs——这将消除作为主要问题的双重递归。 -
@RajeshNavagare,您可能是对的,它可能是有效的,但缺少方法范围声明并且可以正确缩进。我们的想法是让与您合作的人的生活更轻松。
-
@JohnColeman 我完全同意你的观点,但我的目的是降低迭代的复杂性。
标签: recursion