【问题标题】:Triple Fibonacci using linear recursion in Java在 Java 中使用线性递归的三重斐波那契
【发布时间】:2016-10-04 10:17:15
【问题描述】:

我正在尝试编写线性递归三重斐波那契(意思是三重斐波那契数的灵感来自斐波那契数,但从三个预定值开始,之后的每个值都是前三个值的总和。)

其中一个约束基本上是使其尾递归,但到目前为止我还没有机会使用这段代码:

public class TailRecursiveOddonacci {

public long tailOddonacci(int n) {
    if (n <= 3) {
        return 1;
    }
    return tailOddonacciRecursion(0, 1, 2, n);
}

private long tailOddonacciRecursion(int a, int b, int c, int count) {
    if(count <= 0) { 
        return a;
    }
    return tailOddonacciRecursion(b, a+b, a+b+c, count-1);
}
}

我很难找出它为什么不起作用...

编辑:在这种情况下, n 是一个非负整数。例如,10 应该返回 105,或者 5 应该返回 5。

【问题讨论】:

  • 你怎么称呼这段代码? n 的值是多少?
  • @manetsus 仍然不起作用... 10 因为 n 给了我 34

标签: java fibonacci


【解决方案1】:

编辑 根据您的编辑,现在我认为预定值应该都是 1。

  1. 您对重载的初始调用传递了 0、1、2,但它应该传递 1、1、1。
  2. 您的递归调用错误。您应该将每个参数向左移动并传递一个新参数 a + b + c。
  3. 您可以通过在初始调用重载时传递 n - 3 然后在基本情况下返回 c 来避免计算额外的步骤。

查看下面的工作代码:

public long tailOddonacci(int n) {
    if (n <= 3) {
        return 1;
    }
    return tailOddonacciRecursion(1, 1, 1, n - 3);
}

private long tailOddonacciRecursion(int a, int b, int c, int count) {
    if(count <= 0) {
        return c;
    }
    return tailOddonacciRecursion(b, c, a + b + c, count - 1);
}

public static void main(String[] args) {
    System.out.println(new Test().tailOddonacci(5));
}

根据上面的代码,这里是前10个数字:

1, 1, 1, 3, 5, 9, 17, 31, 57, 105

【讨论】:

  • 嗨!很抱歉反驳这一点,但 tailOddonacci(10) 实际上需要为 193 而不是 105! (下一个值),你能解释一下我该怎么做吗?
  • @lesterpierson123 那之前的 9 是什么?
猜你喜欢
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2017-05-08
  • 2019-01-21
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多