0

私はPython言語を初めて使用しますが、この問題が発生しています。以下のコードは期待値を返していません。

def rabbits(n):
    first = 1
    second = 1

    if n == 1 or n == 2:
        return 1
    while n > 2:
        first, second = second, first + second
        n -= 1

    if n > 5:
        die1 = 1
        die2 = 1
        if n == 6 or n == 7:
            return second - 1
        while n > 7:
            die1, die2 = die2, die1 + die2
            n -= 1
        return second - die2
    return second

私はrabbits(6)が7を返すことを望んでいますが、代わりに8を返します。誰かが私がここで間違ったものを見つけるのを手伝ってもらえますか?ありがとう!

4

4 に答える 4

8

述べたようにあなたの問題を解決することは役に立たないと思います。

ただし、このタイプの問題のデバッグに関するアドバイスがいくつかあります。これははるかに便利です。

プログラムのすべての段階で値を印刷します

次に、自分の価値観を持って、頭の中でプログラムをステップスルーし、何が悪かったのかを見つけることができます。

于 2012-08-21T14:39:32.247 に答える
4

n最初に2以下( )に減らしてから、。while n > 2: .. n -= 1かどうかをテストしますn > 5

後者のテストは、n常に2以下になるため、合格することはありません。

その最初の削減はフィボナッチ数列を計算し、その数列の6番目の値は8です(1、1、2、3、5の後)。

問題を回避するには、代わりに単純な範囲ループを使用してください。

for i in range(n, 2, -1):
    first, second = second, first + second

iを変更せずに6から3になりますn

于 2012-08-21T14:39:22.993 に答える
3

私の知る限り、7を返すことはありません。フィボナッチ数列を計算しています。最初のいくつかの用語は1,1,2,3,5,8,13です。7はありません。

フィボナッチ数列は1,1で始まり、次の各項は前の2つの項の合計として計算されます。それはまさにあなたがfirst, second = second, first + secondステートメントで行っていることです。したがってrabbits(n) <=> fibonacci(n)

if n > 5ブランチ内のコードのために7を期待している可能性があります。while n > 2ただし、その前にループがあるため、nは常に2以下になるため、そのブランチは実行されません。

于 2012-08-21T14:40:02.083 に答える
0

ステートメントでnを変更するwhile n > 2か、変数のコピーを使用するか、より適切な方法で実装します。

def rabbits(n):
    first = 1
    second = 1

    if n == 1 or n == 2:
        return 1
    m = n
    while m > 2:
        first, second = second, first + second
        m -= 1

    if n > 5:
        die1 = 1
        die2 = 1
        if n == 6 or n == 7:
            return second - 1
        while n > 7:
            die1, die2 = die2, die1 + die2
            n -= 1
        return second - die2
    return second
于 2012-08-21T14:41:13.847 に答える