Die Übung sagt Ihnen, zwei Funktionen zu schreiben, eine, die f
"mittels eines rekursiven Prozesses" berechnet, und eine andere, die f
"mittels eines iterativen Prozesses" berechnet. Du hast das Rekursive getan. Da diese Funktion in die fib
Funktion in den Beispielen des Abschnitts, der Sie verknüpfen gegeben sehr ähnlich ist, sollten Sie in der Lage sein, dies an dem rekursiven von der Suche, um herauszufinden, und iterativen Beispiele für die fib
Funktion:
; Recursive
(define (fib n)
(cond ((= n 0) 0)
((= n 1) 1)
(else (+ (fib (- n 1))
(fib (- n 2))))))
; Iterative
(define (fib n)
(fib-iter 1 0 n))
(define (fib-iter a b count)
(if (= count 0)
b
(fib-iter (+ a b) a (- count 1))))
In In diesem Fall würden Sie eine f-iter
Funktion definieren, die a
, b
und c
Argumente sowie ein count
Argument würde.
Hier ist die f-iter
Funktion. Beachten Sie die Ähnlichkeit mit fib-iter
:
(define (f-iter a b c count)
(if (= count 0)
c
(f-iter (+ a (* 2 b) (* 3 c)) a b (- count 1))))
Und durch einen kleinen Versuch und Irrtum, ich fand, dass a
, b
und c
-2
initialisiert werden soll, 1
und 0
jeweils, die auch das Muster der fib
folgt Funktionsinitialisierung a
und b
zu 1
und 0
. So sieht f
wie folgt aus:
(define (f n)
(f-iter 2 1 0 n))
Hinweis: f-iter
ist immer noch eine rekursive Funktion sondern wegen der Art und Weise Schema funktioniert, wird es als iterativer Prozess und läuft in O(n)
Zeit und O(1)
Raum, im Gegensatz zu Ihrem Code, der nicht nur eine rekursive Funktion, sondern ein rekursiver Prozess ist. Ich glaube, das ist es, wonach der Autor von Übung 1.1 gesucht hat.
Danke für den Link. Es ist sehr gut artikuliert und codiert. –