Java递归问题

Java递归问题,java,recursion,series,Java,Recursion,Series,考虑以下系列: 1, 1, 2, 2, 4, 8, 32, 256, ... 我用Java编写了这个方法: public static int Fibmul(int n){ if (n == 1) return 1; else if (n == 0) return 0; else if (n < 0) return -1; // -1 means 'nil' else { n = Fibmul(n

考虑以下系列:

1, 1, 2, 2, 4, 8, 32, 256, ...
我用Java编写了这个方法:

public static int Fibmul(int n){

        if (n == 1) return 1;
        else if (n == 0) return 0;
        else if (n < 0) return -1; // -1 means 'nil'
        else {
            n = Fibmul(n - 2) * Fibmul(n - 1);
        }
        return n;
    }
公共静态int Fibmul(int n){
如果(n==1)返回1;
如果(n==0),则返回0;
否则,如果(n<0)返回-1;//-1表示“零”
否则{
n=Fibmul(n-2)*Fibmul(n-1);
}
返回n;
}
要计算序列,只需将元素的最后两个位置相乘即可得到下一个元素,例如Fibmul(4)应返回4,Fibmul(6)应返回32

但是这个代码是错误的,我没有更多的想法,我已经在论文中明确了算法,但我不知道如何实现它

有人能帮我吗


提前谢谢。

我认为您缺少2的值。这应该返回2,其余的都可以:

else if (n == 2) return 2;

请参见此处:

如果您的起始数字是0和/或1,您将无法获得更高的数字。 如果您的起始数字是1和2,您将得到与您描述的序列类似的结果

public static int Fibmul(int n){

    if (n == 1) return 2;
    else if (n == 0) return 1;
    else if (n < 0) return -1; // -1 means 'nil'
    else {
        n = Fibmul(n - 2) * Fibmul(n - 1);
    }
    return n;
}
如果要遵循您所述的规则,它不能以
1,1,2
开头,因为
1*1
不等于2

注意:你的序列实际上是普通的斐波那契数列,但每个项都是2的幂

Fibonacci: 0,    1,    1,    2,    3,    5,    13, ...
Fibmul: 2**0, 2**1, 2**1, 2**2, 2**3, 2**5, 2**13, ...

n==2时,您只需要一个额外的解决方案,因为否则您将继续使用
1,1,1,1,…

公共静态int Fibmul(int n){
如果(n==2)
返回2;
如果(n==1)
返回1;
else如果(n==0)
返回0;
else if(n<0)
返回-1;/-1表示“零”
返回Fibmul(n-2)*Fibmul(n-1);
}
测试它是否按预期工作

Fibmul(0) = 0
Fibmul(1) = 1
Fibmul(2) = 2
Fibmul(3) = 2
Fibmul(4) = 4
Fibmul(5) = 8
Fibmul(6) = 32
Fibmul(7) = 256
Fibmul(8) = 8192
Fibmul(9) = 2097152

你说“错了”是什么意思?以什么方式?对于什么输入?如果前两个项都是1,第三个项怎么可能是2?你试图建立的规则是什么?如果
n
是2,你调用并返回
Fibmul(0)
,它是0,这使得乘法没有意义。你不是在计算
2^(Fib(n))
以一种复杂的方式?然后所有后续的项都将是1,因为你将把很多个1相乘。啊,是的!符合事实的hmmadding 2显式将使此工作哇。。。。很抱歉我真的很惭愧。非常感谢YassinThanks@khelwood。。。这是一个愚蠢的错误(
Fibmul(0) = 0
Fibmul(1) = 1
Fibmul(2) = 2
Fibmul(3) = 2
Fibmul(4) = 4
Fibmul(5) = 8
Fibmul(6) = 32
Fibmul(7) = 256
Fibmul(8) = 8192
Fibmul(9) = 2097152