Wie genau würde eine "nicht terminierende Funktion" in deiner obigen Darstellung aussehen?
§g(x)=g(x)§
@David: Wenn ich Zwiswchenzustände in die Knoten schreibe, kann ich die sicherlich auch endrekursiv darstellen...
@GreenPepper: Die Fibonacci-Folge ist endrekursiv darstellbar:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
|
int fob(int depth, int n, int m)
{
if(depth <= 0)
return n;
fob(depth-1, n+m, n);
}
int fib(int n)
{
fob(n, 1, 0);
}
|
Wenn du natürlich die Fibonacci-Folge an sich erzeugen willst, dann divergiert die nach meiner Definition, damit interessiert sie mich auch nicht, da mich nur
nicht divergierende Funktionen hierbei interessieren!
Vielleicht nochmal in anderen Worten: Ich bezeichne etwas als endrekursiv, wenn es nach einem rekursiven Aufruf keine weiteren Vorgänge gibt. Also
int a(int b){return (b>0) ? 1+a(b-1) : 0;} ist zum Beispiel nicht endrekursiv, dafür aber
int a(int b, int akk=0){return (b>0) ? a(b, akk+1) : akk;}
MfG
Check