1. ホーム
  2. python

[解決済み] コラッツ予想列

2022-02-15 17:05:40

質問

コラッツ予想

私がやろうとしていること collatz_sequence という関数を書き、開始点を含む整数列を返す。 配列はリストの形で返す。 もしユーザが 1 より小さい整数を入力したら、空のリスト [] を返すように関数を作成します。

コラッツ予想の背景

任意の自然数nをとり、nが偶数なら2で割ってn / 2とし、nが奇数なら3を掛けて1を足し、3n + 1とする。これを無限に繰り返す。どのような数から始めても、最終的には必ず1に到達する、という推測である。

今のところあるもの

def collatz_sequence(x):
    seq = [x]
    if x < 1:
       return []
    while x > 1:
       if x % 2 == 0:
         x= x/2
       else:
         x= 3*x+1 
    return seq

1より小さい数でこれを実行すると、空集合が得られ、それは正しいです。しかし、1以上の数で実行すると、その数しか得られません。例えば、collatz_sequence(6) は [6] を返します。つまり、6 は 6,3,10,5,16,8,4,2,1 をリストで返す必要があります。

どのように解決するのですか?

を追加するのを忘れています。 x の値を seq のリストを作成します。

def collatz_sequence(x):
    seq = [x]
    if x < 1:
       return []
    while x > 1:
       if x % 2 == 0:
         x = x / 2
       else:
         x = 3 * x + 1 
       seq.append(x)    # Added line
    return seq

検証を行います。

~/tmp$ python collatz.py 
[6, 3, 10, 5, 16, 8, 4, 2, 1]