任何前两个数字的java斐波那契

标签 java recursion fibonacci tail-recursion

我需要编写 java 方法来计算用户输入的任何前两个数字的斐波那契数列,假设用户输入 1020,并且想要该系列的前 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参数表示用户希望该数列运行到多少,但我如何修改它以确保该数列使用用户希望系列开始的前两个数字?

最佳答案

我会使用 memoizationMap<Integer,Long>并通过 firstsecond 构造函数的条款。例如,

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/

相关文章:

java - 在 Java 中将字符串转换为具有日期格式的字符串?

按字母顺序将 2 个字符串组合到另一个字符串中

Java斐波那契数列快速方法

php - 一个我无法弄清楚的错误,当使用 stdclass 时,将值显示为 *RECURSION*

python - Python递归期间的内存使用

ruby - 斐波那契递归 ruby 解释

c - 小于给定 n 的斐波那契数列的数量

java - 是否可以将元素添加到先前定义为字符串的数组中

java - Android 中 Volley 抛出 JsonPars 异常

java - 数组编程 - N 个玩家的 Tic Tac Toe nxn 板