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