2017-02-03 6 views
0

私はPythonコードをいくつかの再帰を解決するために持っています。あまりにも大きな数値を返すPythonの分数

問題は、コードがばかばかしい分数(正しい)を返しますが、可能な限り小さな分数ではないことです。手動で数式を解くことができるので分かります。ここで

は私のコードです:

from __future__ import division 
import sys 
from fractions import Fraction 
def t(n): 
    if n==0: 
     return 0 
    else: 
     return 1/(4-t(n-1)) 

print(Fraction(t(int(sys.argv[1])))) 

あなたはpython fraction.py 2でこのコードを実行する場合は、4月15日を持っているが、ここで私が何を得るのです必要があります。

4803839602528529/18014398509481984 

私が思う数値的に正しいとする、ときに私ちょうどそれを計算する私は0.26666666666666666を得る(多分両方の分数は0からのx桁で異なっている)。

ここで問題は何ですか?

+3

あなたは小数点以下の計算をしません。浮動小数点の計算を行い、不正確な結果から小数点を作成しています。分数で計算します。 – user2357112

+0

ユーザが負の数(-1など)を入力した場合の処理​​について気になりますか? –

+0

@TerryJanReedyいいえ私はちょうどアルゴリズム的な問題を解決していました、私は唯一のユーザーです – Seraf

答えて

6

あなたは数学が、後にしていない前Fractionオブジェクトに変換:あなたはFractionに変換する前に数学を行う場合

def t(n): 
    n = Fraction(n) 
    if n==0: 
     return n 
    else: 
     return 1/(4-t(n-1)) 

、数学があなたに不正確を与えて、浮動小数点演算として行われます結果は不正確なFractionに変換します。

最初に変換すると、数学は端数の計算として行われ、物事は正確に維持されます。

関連する問題