古典的な 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 などの系列が得られます。 、私は正しいと信じています)。
ただし、私のコードは次の 2 つのケースでは機能しないようです: x=2 (シリーズ 1、1、2、2、3、4、5、7、9 を取得する必要があるときに、すべて 1 を取得します)および x=1 (上記のリンクに従ってすべて 1 を取得する必要がある場合、1、0、1、0、1、0 を取得します)。
私のコードは次のとおりです(現在、最初の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;
}
}