AW: [Python-de] Rekursiver Funktionsaufruf

Rene Liebscher R.Liebscher at gmx.de
Fri Jun 22 15:20:28 EDT 2001


Rainer Fischbach wrote:
> 
> man kann die Funktion selbst als Argument mitgeben. Z. B. so:
> 
> def ar():
>     def f(i, rf):
>         if i<1: return 1
>         return i*rf(i-1, rf)
>     print f(10, f)

Das ist ja die offensichtliche Loesung, aber wenn die Funktion laenger 
wird oder an mehreren verschiedenen Stellen sich selbst aufruft,
vergisst man den zusaetzlichen Parameter leicht. Uebrigens eine 
Definition "def f(i, rf=f):", also als Defaultparameter geht auch nicht. 

Mir geht es hier eher um das Prinzip als das dieses Beispiel an sich
laeuft. Ich will wissen, ob ich das Funktionsobjekt einer laufenden
Funktion irgendwie rauskriege. (Wenn es schon nicht mit der einfachen
Variante geht.) Ich denke wenn Python schon lokale Funktionen erlaubt,
dann sollte man diese auch genauso rekuriv schreiben duerfen, wie solche
auf Modulebene.

> -----Ursprüngliche Nachricht-----
> 
> Hallo,
> 
> Wie kann man rekursive Funktionen schreiben, die
> nur innerhalb einer anderen Funktion bekannt sind ?
> (also local fuer diese Funktion)
> 
> Beispiel:
> 
> def a():
>     def f(i):
>         if i<1: return 1
>         return i*f(i-1)
>     print f(10)
> 
> a()
> 
> bringt als Fehler
> Traceback (most recent call last):
>   File "C:\Programme\Python20\Pythonwin\pywin\framework\scriptutils.py",
> line 301, in RunScript
>     exec codeObject in __main__.__dict__
>   File "C:\temp\Script1.py", line 7, in ?
>     a()
>   File "C:\temp\Script1.py", line 5, in a
>     print f(10)
>   File "C:\temp\Script1.py", line 4, in f
>     return i*f(i-1)
> NameError: There is no variable named 'f'
> 
> Wenn f auf Modulebene definiert ist, ist das kein Problem.
> Wenn man irgendwie das Funktionsobjekt der gerade ausgefuehrten
> Funktion rauskriegen kann, ginge die Rekursion sicher mit
> apply() zu machen.
> Aber wie kommt man an das Funktionsobjekt?
> 
> Vielen Dank im voraus.
> 
> MfG
> Rene Liebscher



More information about the Python-de mailing list