Java 过期的斐波那契兔子

Java 过期的斐波那契兔子,java,recursion,fibonacci,Java,Recursion,Fibonacci,我正在努力开发代码,对经典的Fib兔子进行调整。在这种情况下,它们在出生后x代过期。下面的链接中有一个示例: 我理解链接中间的表格显示了x=2的情况(兔子2年后到期)(该表格有5列,其中第1列=“年”,第2列=“新生兔子对”,第3列=“新成熟兔子对”,第4列=“真正成熟的兔子对”,第5列=“总计”) 根据这张表,每年兔子的总数按照顺序1,1,2,2,3,4,5,7,9 我开发的代码似乎适用于x>2的值(例如,当我设置x=5时,我得到的序列是:1、1、2、3、5、7、11、16、24、35等等,

我正在努力开发代码,对经典的Fib兔子进行调整。在这种情况下,它们在出生后x代过期。下面的链接中有一个示例:

我理解链接中间的表格显示了x=2的情况(兔子2年后到期)(该表格有5列,其中第1列=“年”,第2列=“新生兔子对”,第3列=“新成熟兔子对”,第4列=“真正成熟的兔子对”,第5列=“总计”)

根据这张表,每年兔子的总数按照顺序1,1,2,2,3,4,5,7,9

我开发的代码似乎适用于x>2的值(例如,当我设置x=5时,我得到的序列是:1、1、2、3、5、7、11、16、24、35等等,我认为这是正确的)

然而,我的代码似乎在两种情况下都无法工作:x=2(当我应该得到系列1、1、2、2、3、4、5、7、9……)和x=1(根据上面的链接,当我应该得到所有1时,我得到1、0、1、0)

我的代码如下(当前为顺序中的前22个数字设置x=5):

公共类TestFib{
公共静态void main(字符串参数[]){
int x=5;
对于(int i=1;i<22;i++){
System.out.println(“n=“+i+”,“+deadrabbts(i,x));
}
}
公共静态int死兔子(int n,int x){
int-Fn;
如果(n==0){
Fn=0;
}       
else如果(n==1){
Fn=1;
}
else if(n
首先,您为
x=5
描述的输出是错误的(应该是1、1、2、3、5、7、11、17、26、40等),并且您的代码没有为任何
x>2
生成正确的结果

x
是总的生命年数(包括婴儿年),因此对于
x=1
你应该得到(1,0,0,…),对于
x=2
你应该得到所有的1,对于
x=3
你得到1,1,2,2,3,4,5,7,9,。。。等等

我修复了您的函数,现在它为任何输入生成正确的输出,您缺少了一个特殊情况
n=x+1
,它是由于序列的初始化而创建的,最后一种情况下的减法应使用
n-x-1

public static int DeadRabbits(int n, int x) {
    int Fn;
    if (n < 1) {
        Fn = 0;
    }       
    else if (n == 1) {
        Fn = 1;
    }
    else if (n < x + 1) {
        Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x);
    }
    else if (n == x + 1) {
        Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x) - 1;
    }
    else {
        Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x)
            - DeadRabbits(n - x - 1, x);
    }
    return Fn;
}
公共静态int死兔子(int n,int x){
int-Fn;
if(n<1){
Fn=0;
}       
else如果(n==1){
Fn=1;
}
否则如果(n

希望这有帮助。

我在math.stackexchange上看到了你的帖子。我是不是要假设那边的帖子是从一个更理论的角度提问的,这是一个更实际的问题?是的,确实如此。我希望更好地理解理论角度可以帮助我解决代码中的问题!:)你好,罗恩:我会仔细看看你的代码。然而,我认为x=2的情况应该有序列1、1、2、2、3、4、5、7、9(而不是你所说的所有1)。这个序列在上面的链接中(以及我看到的大多数链接),在我的课堂上,这是提供给我们的序列。谢谢你。想想看,x代表表中的列数,如果x=2,那么你在开始时有一对婴儿,在第二年有一对成熟的婴儿,没有婴儿,第三年有一对婴儿,没有成熟的婴儿(他们死了),等等。。。每年总共有1对,你所说的序列是x=3的正确序列。谢谢,罗恩。我会考虑的。我会检查一下你的答案,因为它提出了好主意。再次感谢。
public static int DeadRabbits(int n, int x) {
    int Fn;
    if (n < 1) {
        Fn = 0;
    }       
    else if (n == 1) {
        Fn = 1;
    }
    else if (n < x + 1) {
        Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x);
    }
    else if (n == x + 1) {
        Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x) - 1;
    }
    else {
        Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x)
            - DeadRabbits(n - x - 1, x);
    }
    return Fn;
}