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