【问题标题】:Generate Next Fibonacci numbers生成下一个斐波那契数
【发布时间】:2017-12-06 18:49:35
【问题描述】:

我收到了这个关于生成 fib 数字的问题。我见过的 fib 数字的递归实现总是从上到下像 fib(n)=fib(n-1) + fib(n-2) 但这个问题假设 fib(n-1), fib( n-2) 存在计算下一个等等。

public class Fibonacci {
    int[] fiboNums;

    public Fibonacci(int n) {
        // TODO: generate the first n fibonacci numbers
    }

    private void generateNextFibo(int n, int lastFibo, int lastLastFibo) {
        // TODO: Implement this recursive function to compute next
        // fibonacci number.
    }

    public int[] getAll() {
        return  fiboNums;
    }
}

【问题讨论】:

  • 你为什么要问一个你也已经知道答案的问题......
  • @RAZ_Muh_Taz 提出问题来回答他们很好。
  • @RAZ_Muh_Taz 你有没有在 SO 中创建过问题?如果你注意到底部有一个复选框,表示你可以回答你的问题。
  • 为什么要递归?还有其他不涉及递归的方法
  • @assembler 只为挑战

标签: java algorithm recursion fibonacci


【解决方案1】:

第一个棘手的部分是传递参数 generateNextFibo 需要被调用。第二部分是 generateNextFibo 方法的退出条件。

public class Fibonacci {
    int fiboNums[];

    public Fibonacci(int n) {
        // generate the first n fibonacci numbers
        fiboNums = new int[n];
        fiboNums[0] = 1;
        fiboNums[1] = 1;

        // Start from 3 since the first two fibo numbers are given
        if (n >= 3)
            generateNextFibo(3, fiboNums[1], fiboNums[0]);
    }

    private void generateNextFibo(int n, int lastFibo, int lastLastFibo) {
        // Implement this recursive function to compute next fibo number.
        fiboNums[n - 1] = lastFibo + lastLastFibo;
        if (fiboNums.length > n) {
            lastLastFibo = lastFibo;
            lastFibo = fiboNums[n - 1];
            generateNextFibo(n + 1, lastFibo, lastLastFibo);
        }
    }

    public int[] getAll() {
        return  fiboNums;
    }
}

【讨论】:

  • 现在如果有doc comments,读者可以查看规范的满足程度。
  • @greybeard 将其视为伪代码或遗留代码(如果有帮助)。你能想出什么新的解决方案吗? :)
  • Any new solution [a greybeard] can come up with? 不。Greybeards 知道一切(值得一提)都已经说过和做过,即使不是每个人。
猜你喜欢
  • 2011-12-18
  • 2015-04-25
  • 2017-11-13
  • 2013-02-24
  • 1970-01-01
  • 2014-08-07
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多