Το παρακάτω πρόβλημα μοιάζει να μπορεί να επιλυθεί με μια αναδρομική συνάρτηση:
Σε python το παραπάνω πρόβλημα γίνεται:
def f(x):
if x>4:
return(f(x-1)+x)
else:
return(x-f(x+1))
print(f(5)+f(6))
Ωστόσο όταν εκτελεστεί μας δίνει
RuntimeError: maximum recursion depth exceeded
Ο λόγος είναι ο εξής:
f(5)
return(f(4)+5)f(4)
return(4-f(5))f(5)
return(f(4)+5))f(4)
return(4-f(5))…
Οπότε κάποια στιγμή το πρόγραμμα φτάνει το μέγιστο βάθος αναδρομής και τερματίζει.
Το
όμως μπορεί να υπολογιστεί αλγεβρικά με το παρακάτω σύστημα:
![Rendered by QuickLaTeX.com \[\begin{cases} f(5) = f(4) + 5\\ f(4) = 4 - f(5) \end{cases}\]](https://blogs.sch.gr/dimnikolos/wp-content/ql-cache/quicklatex.com-aa16100ba4b5fb7a794f9e2dfd62816c_l3.png)
Με πρόσθεση κατά μέλη έχουμε:

Επίσης,
.
Τέλος,
![]()
Το ίδιο αποτέλεσμα το έχουμε με το παρακάτω πρόγραμμα:
def f(x):
if x == 5:
return(4.5)
elif x>4:
return(f(x-1)+x)
else:
return(x-f(x+1))
print(f(5)+f(6))
Που εκτυπώνει:
15.0