2017-01-12 17 views
3

私は再帰的シーケンスを書いて、それをn番目の最初の値として出力します。 存在符号化された関数である:関数を含むシーケンスの再帰式

def f(x): 
    return x**2 - 4 

def h(x): 
    return (x-(((3-x)*f(x))/(f(3)-f(x)))) 

は、今私はそれの再帰的配列とプリントN個の第1の値コーディングしたい:

X N + 1 =さh(X NをX = 4/3

について)

私のコードであります(私は同じ値をn回受けるが、私は似て何かを取得したいと思い)もちろん動作していない:

def g(n): 
    for i in range(1, n+1): 
     x = 4/3 
     x = h(x) 
     print(x) 
+0

P. S. なぜLateXがStackOverflowで動作しないのですか? – Hendrra

+1

ループの前にx = 4/3を割り当てる必要があります。今度は、繰り返しごとに4/3になります。 – poe123

+0

@Hendrra http://meta.stackexchange.com/questions/30559/latex-on-stack-overflow – Tagc

答えて

4

あなたは単に4/3各反復でxを上書き:

 
def g(n): 
    for i in range(1, n+1): 
 x = 4/3 
     x = h(x) 
     print(x) 

単に移動ループ上記の文:

def g(n): 
    x = 4/3 
    for i in range(1, n+1): 
     x = h(x) 
     print(x) 

あなたがループに入る前に、おそらくあなたもprint(x)にしたいです。

しかし、いくつかの点でコードを改善することができます。まず第一に、私はprintという結果にはなりません。印刷には副作用があります。プログラムでは、通常、計算する関数と副作用を持つ関数を区別しようとします。

次の同じコンテキストでは、generatorを使用してリストや何かを返しません。あなたは、単に指標の任意の量のためのシーケンスを定義することができます

def g(): 
    x = 4/3 
    while True: 
     x = h(x) 
     yield x 

今、あなたは、例えば最初の10個の要素のためのgを依頼、またはフィルタを実行することができます...要素がさらに遅延して生成されます。

+0

ありがとう!私は、私が見ることができるように、それらが有用かもしれない発電機については知らなかった。 – Hendrra