2016-10-08 4 views
0

この関数の目的は、操作を実行した後に1になるまでにステップ数を数えることです。関数に入力した数値は、数値が偶数の場合は2で割り、奇数の場合は3で3に増やします。これらの操作は、その番号に到達するまで実行されます。例えば、数字3で始めると、3> 10> 5> 16> 8> 4> 2> 1のようになります。関数は8ステップを要したので数字 "8"を返す必要があります3を掛けて3を掛け、奇数に1を足して3にする。数値が1になるまでのステップ数をカウントする

ここまでは私のコードです。私は、私の関数が最初のステップを返す方法を理解していました(例:10と6の3つのリターン3を返すことができました)が、私の関数に1に達するまでに要したステップ数を計算する方法を理解できません。

def collatz_counts(n): 
    total = 0 
    while n > 1: 
     if n % 2 == 0: 
      n =(n // 2) 
      total += 1 

     elif n % 2 == 1: 
      n = (3 * n + 1) 
      total += 1 
      return total 
+0

を取得するために、1に初期total値を調整する必要が7を返します。 – idjaw

+0

それはちょうど7つのステップのように見える... – AChampion

+0

@AChampionその8最初のステップを計る – famguy74

答えて

0

whileループの後にコードを戻すにはコードを調整する必要があります。さもなければ、それは奇数と出会うときには早すぎるでしょう。

さらに、total += 1はどちらの場合でも実行されます。ブロックif .. elif ..からそれを移動することができます。

def collatz_counts(n): 
    total = 0 
    while n > 1: 
     if n % 2 == 0: 
      n =(n // 2) 
     elif n % 2 == 1: 
      n = (3 * n + 1) 
     total += 1 # <--- 
    return total # <--- 

ところで、collatz_counts(3)はあなたが私はあなたのロジックを見直し、しかし、あなたの `total`は、あなたの中の外でなければなりませんが返されませんでした8.

+0

@MoinuddinQuadri、それを指摘していただきありがとうございます。私はインデントを修正しました。 – falsetru

+0

ありがとうございました。特に@falsetruは、合計を1に設定するアドバイス – famguy74

関連する問題