Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中使用线性递归的三重Fibonacci_Java_Fibonacci - Fatal编程技术网

Java中使用线性递归的三重Fibonacci

Java中使用线性递归的三重Fibonacci,java,fibonacci,Java,Fibonacci,我试图编写一个线性递归的三重Fibonacci(这意味着三重Fibonacci数受Fibonacci数的启发,但从三个预定值开始,之后的每个值都是前面三个值的总和。) 约束之一基本上是使其尾部递归,但到目前为止,我还没有机会使用这段代码: public class TailRecursiveOddonacci { public long tailOddonacci(int n) { if (n <= 3) { return 1; } return

我试图编写一个线性递归的三重Fibonacci(这意味着三重Fibonacci数受Fibonacci数的启发,但从三个预定值开始,之后的每个值都是前面三个值的总和。)

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

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);
}
}
公共类TailRecursiveOddonacci{
公共长尾奥多纳奇(国际北){
如果(n编辑
根据您的编辑,现在我认为预定值应该都是1

  • 对重载的初始调用通过了0、1、2,但它应该通过1、1、1
  • 您的递归调用错误。您应该将每个参数向左移动,并传递一个新参数,即
    a+b+c
  • 通过在重载的初始调用中传递
    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));
    }
    
    编辑 根据您的编辑,现在我认为预定值应该都是1

  • 对重载的初始调用通过了0、1、2,但它应该通过1、1、1
  • 您的递归调用错误。您应该将每个参数向左移动,并传递一个新参数,即
    a+b+c
  • 通过在重载的初始调用中传递
    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));
    }
    

    你怎么称呼这个代码?
    n
    的值是多少?@manetsus仍然不起作用…10因为n给了我34你怎么称呼这个代码?
    n
    的值是多少?@manetsus仍然不起作用…10因为n给了我34Hi!很抱歉重新反驳这个,但是tailOddonacci(10)实际上需要是193而不是105!(下一个值),你能告诉我怎么做吗?@Lesterpierson 123在那之前的9是什么?嗨!很抱歉反驳这个,但是tailOddonacci(10)实际上需要是193而不是105!(下一个值),你能告诉我怎么做吗?@Lesterpierson 123在那之前的9是什么吗?