1

古典的な 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;
    }
}
4

1 に答える 1