2

私は、数がコラッツ予想を通過するのにかかる反復のグラフを作成するためのPythonスクリプトを作成しようとしています。この例では、非常に小さな範囲 (数値 1 のみ) のみを使用しましたが、このスクリプトは実行を続けているようで、10 分間実行した後でもグラフを生成しません。以下はコードです。何かアドバイス?

import math
import matplotlib.pyplot as plt

def collatz(x):
    count = 0
    while x != 1:   
        if x % 2 == 0:
            x=x/2
            count=count+1
        else:
            x=(x*3)+1
            count=count+1
    return count 
x_coordinates = []
y_coordinates = []
for i in range(0, 2):
    x_coordinates.append(i)
    y = collatz(i)
    y_coordinates.append(y)

plt.plot(x_coordinates, y_coordinates)
plt.show()
4

1 に答える 1

2

で反復を開始するとy = collatz(0)、ループにx==0入りますよね?while x != 1

では、if 句はどうなるでしょうか。

if 0 % 2 == 0:
    x = 0/2 # == 0

x が 1 になることはなく、while ループを永遠に実行し続けますね。

コラッツの問題について言及している場合は、ステートメントを注意深く読み直してください。

すべてのn > 0 に対して、初期値 n からのコラッツ数列は最終的に 1 に到達しますか?

于 2014-05-20T22:02:24.360 に答える