我需要编写 java 方法来计算用户输入的任何前两个数字的斐波那契数列,假设用户输入 10
和 20
,并且想要该系列的前 5 个数字,输出将为 10 20 30 50 80
。我已经实现了执行此操作的迭代方法,但我的问题是使用 RECURSIVE 方法来完成它。
public int fRec(int n)
{
//base case of recursion
if ((n == 0) || (n == 1))
return n;
else
//recursive step
return fRec(n-1) + fRec(n-2);
}
这是斐波那契数列的典型递归方法,n
参数表示用户希望该数列运行到多少,但我如何修改它以确保该数列使用用户希望系列开始的前两个数字?
最佳答案
我会使用 memoization用Map<Integer,Long>
并通过 first
和 second
构造函数的条款。例如,
public class Fibonacci {
public Fibonacci(long first, long second) {
memo.put(0, first);
memo.put(1, second);
}
Map<Integer, Long> memo = new HashMap<>();
public long fRec(int n) {
if (n < 0) {
return -1;
}
if (memo.containsKey(n)) {
return memo.get(n);
}
long r = fRec(n - 2) + fRec(n - 1);
memo.put(n, r);
return r;
}
public static void main(String[] args) {
Fibonacci f = new Fibonacci(10, 20);
for (int i = 0; i < 5; i++) {
System.out.println(f.fRec(i));
}
}
}
哪些输出(按要求)
10
20
30
50
80
关于任何前两个数字的java斐波那契,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39339771/