gpt4 book ai didi

java - 过期的斐波那契兔子

转载 作者:行者123 更新时间:2023-12-01 04:19:17 25 4
gpt4 key购买 nike

我正在尝试开发代码来对经典 Fib 兔子进行调整。在这种情况下,他们在出生后 x 代就到期了。下面的链接中有一个示例:

http://matheminutes.blogspot.com/2012/02/killing-fibonaccis-rabbits.html

我理解链接中间的表格显示 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, 时,我得到全 1。 ..) 和 x=1 (我得到 1, 0, 1, 0, 1, 0,而我应该根据上面的链接得到全 1)。

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

public class TestFib {

public static void main(String args[]) {
int x = 5;
for (int i = 1; i < 22; i++) {
System.out.println("n = " + i + ", " + DeadRabbits(i, x));
}
}

public static int DeadRabbits(int n, int x) {
int Fn;
if (n == 0) {
Fn = 0;
}
else if (n == 1) {
Fn = 1;
}
else if (n < x ) {
Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x);
}
else {
Fn = DeadRabbits(n - 1, x) + DeadRabbits(n - 2, x)
- DeadRabbits(n - x, x);
}
return Fn;
}
}

最佳答案

首先,您描述的 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;
}

希望这有帮助。

关于java - 过期的斐波那契兔子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19127674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com