Rekursive Prozeduren 2
Inhaltsverzeichnis |
Fakultät
Schreiben Sie eine rekursive Prozedur fak, die eine Zahl n als Argument erwartet und deren Fakultät n! als Ergebnis liefert.
Fibanocci
Schreiben Sie eine rekursive Prozedur fib, die die n-te Fibonacci-Zahl als Ergebnis liefert.
Hinweis: Die n-te Fibonacci-Zahl ergibt sich aus der Summe ihrer beiden Vorgänger. Die 0-te und 1-te Fibonacci-Zahl ist jeweils 1.
Fibanocci Liste
Schreiben Sie eine rekursive Prozedur fibonacci_list, die eine Liste mit den ersten n Fibonaccizahlen zurückgibt. Beachten Sie, dass (fib 0) die erste Fibonacci-Zahl in der Liste liefert.
Hinweis: Verwenden Sie zur Lösung dieser Aufgabe Ihre Prozedur fib aus der vorherigen Aufgabe!
Sollte die entstehende Liste absteigend sortiert sein, so kann dies mittels reverse behoben werden.
Ascending List
Schreiben Sie eine Prozedur ascending, die eine Liste nimmt und #t zurückgibt, falls die Listenelemente aufsteigend geordnet sind, ansonsten #f.
Hinweis: Beachten Sie das Resultat für die leere Liste ’().
Aufrufbeispiele:
> (ascending '(1 2 4 7)) #t > (ascending '(1 3 4 5 2 6)) #f > (ascending '()) #t |
Längenbestimmung
Listenlänge
Schreiben Sie eine Prozedur my-length, die eine Liste als Argument nimmt und die Anzahl der Elemente in der 1. Ebene ausgibt. Die eingebaute Prozedur length darf dabei nicht verwendet werden!
Aufrufbeispiele:
> (my-length ’(1 2 3 4 5)) 5 > (my-length ’(1 2 3 4 5 (6 7) (8 (9 10 (11)))) 7 |
Tiefenlänge
Schreiben Sie eine weitere Prozedur deep-length, die ebenfalls eine Liste als Argument nimmt, jedoch die Anzahl aller Elemente in sämtlichen Teillisten ausgibt.
Hinweis: Verwenden Sie Ihre Prozedur mylength und arbeiten Sie an deren Programmcode, um deep-length herzustellen.
Aufrufbeispiele:
> (deep-length ’(1 2 3 4 5)) 5 > (deep-length ’(1 2 3 4 5 (6 7) (8 (9 10 (11)))) 11 |