2017-01-12 4 views
3

Ich bin eine rekursive Sequenz schreiben und drucken Sie es ist n erste Werte. Es sind die Funktionen kodiert:Rekursive Formel einer Sequenz mit einer Funktion

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

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

und nun wäre Ich mag die rekursive Sequenz und Druck n ersten Werten davon Code:

x n + 1 = h (x n)

Für x = 4/3

Mein Code ist natürlich nicht arbeiten (erhalte ich gleich mal Wert n, aber ich würde etwas gleich lernen):

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

P.S. Warum LateX nicht mit StackOverflow funktioniert? – Hendrra

+1

Sie sollten vor der Schleife x = 4/3 zuweisen. Jetzt wird es mit jeder Iteration 4/3. – poe123

+0

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

Antwort

4

Sie einfach überschreiben x mit 4/3 jeder Iteration:

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

einfach die bewegen Erklärung über die Schleife:

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

Vielleicht möchten Sie auch zu print(x), bevor Sie die Schleife ein.

Nichtsdestotrotz können Sie Ihren Code in einigen Punkten verbessern: zuerst würde ich nicht print das Ergebnis: Drucken hat Nebenwirkungen. In einem Programm versuchen Sie normalerweise zwischen Funktionen zu unterscheiden, die berechnen, und Funktionen, die Nebenwirkungen haben.

Als nächstes und im selben Kontext würde ich eine generator eine nicht eine Liste oder etwas zurückgeben. Sie können einfach die Sequenz für eine beliebige Menge von Indizes definieren:

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

Jetzt können Sie g für beispielsweise die ersten 10 Elemente fragen, oder Filtern durchführen, ... Elemente sind weiterhin träge erzeugt.

+0

Vielen Dank! Ich habe nichts über die Generatoren gewusst, die, wie ich sehen kann, nützlich sein könnten. – Hendrra