2017-08-19 8 views
-1

私はシーケンスの合計に再帰的なコードを実装しています:x + x^2/2 + x^3/3 ... + x^n/n、私は2つの再帰的関数は、n < 4の近似値を返していますが、n> = 4の場合は非常に高く、明らかに間違っていますが、これは私が思った最良の定義です。以下のコード:Pythonでの再帰的なシーケンスの合計

def pot(x, n): 
    if n == 0: return 1 
    else: 
     return x * pot(x, n - 1) 

def Sum_Seq (x, n): 
    if n == 1: return x 
    else: 
     return x + Sum_Seq(pot(x, n - 1), n - 1)/(n - 1) 
+1

は入力、期待される出力と実際の出力のいくつかの例を提供します。 –

+0

'/'はPython 3で浮動小数点の除算です。それはあなたが望むものですか? –

+0

[合計を計算するための再帰関数?]の可能な複製(https://stackoverflow.com/questions/19966290/recursive-function-to-calculate-sum) – manelfp

答えて

1

実際、この場合、なぜ2つの再帰関数が必要なのかわかりません。単にパワーnxを計算するx**nを使用します。

def sum_seq(x, n): 
    if n == 1: 
     return x 
    else: 
     return (x**n/n) + sum_seq(x, n-1) 

これは、Python 3での素晴らしい作品:

>>> power(10, 6) 
Out[1]: 189560.0 

のPython 2に、/オペレータは、あなたがやっているかどうかを推測するだろう、ということを覚えておいてください整数除算または浮動小数点除算。

from __future__ import division 

あるいは浮くためにあなたの部門をキャスト:あなたの部門を保証するためには、単にでPythonの3から/オペレーターをインポート、Pythonの2の浮動小数点除算になります

float(x**n)/n 
1

あなたSum_Seq()関数はこのようになります。

def Sum_Seq (x, n): 
    if n == 1: 
     return x 
    else: 
     return pot(x, n)*1.0/n + Sum_Seq(x, n-1) # 1.0 is used for getting output as a fractional value. 

注:あなたはは、別の再帰関数の計算パワーを作るためには必要ありません。 Pythonでは、xをpower nにするには、x**nを実行するだけです。

1

あなたpot機能**power operatorの仕事をしているようです。

たぶん、このような何かをするのに役立ちます -

In [1]: # x + x^2/2 + x^3/3... + x^n/n 

In [2]: def sum_seq(x, n): 
    ...:  if n <= 0: 
    ...:   return 0 
    ...:  return (x**n)/n + sum_seq(x, n - 1) 
    ...: 

In [3]: sum_seq(10, 2) 
Out[3]: 60.0 

EDIT: 私はあなたのコードで誤った結果の理由は、この行だったと思う -

Xに Sum_Seqを追加

return x + Sum_Seq(pot(x, n - 1), n - 1)/(n - 1)

、あなたが言及したパターンに従っていない

3

再帰があなたの目標ではなく、あなたの目標であるなら、あなたはこの機能を使用することができます。

def polynom(x,n_max): 
    return sum(pow(x,n)*1./n for n in range(1, n_max + 1)) 

次に、あなたが望む結果を得る:

x = 1 
for i in range(5): 
    print polynom(x,i) 
Out: 
    0 
    1.0 
    1.5 
    1.83333333333 
    2.08333333333