【发布时间】:2013-01-17 09:59:25
【问题描述】:
我正在尝试理解 Scheme 中的递归,但我很难为它做空运行,例如一个简单的斐波那契数问题。
有人可以为我分解添加发生的步骤吗?
(define (fib n)
(if (<= n 2)
1
(+ (fib (- n 1)) (fib (- n 2)))))
【问题讨论】:
标签: recursion scheme racket fibonacci
我正在尝试理解 Scheme 中的递归,但我很难为它做空运行,例如一个简单的斐波那契数问题。
有人可以为我分解添加发生的步骤吗?
(define (fib n)
(if (<= n 2)
1
(+ (fib (- n 1)) (fib (- n 2)))))
【问题讨论】:
标签: recursion scheme racket fibonacci
在伪代码中,fib(n) <b>=</b> n <= 2 <b>-></b> 1 <b>; else -></b> fib(n-1) + fib(n-2) => (1 1 2 3 5 ...)。
例如,fib(5) 简化为:
fib(5)
fib(4) + fib(3)
(fib(3) + fib(2)) + fib(3)
((fib(2) + fib(1)) + fib(2)) + fib(3)
((1 + 1) + fib(2)) + fib(3)
(2 + fib(2)) + fib(3)
(2 + 1) + fib(3)
3 + fib(3)
3 + (fib(2) + fib(1))
3 + (1 + 1)
3 + 2
5
【讨论】:
这是打印斐波那契数列成员从 1 到 n 的代码 每个都在一个新行中。需要注意的是,它使用了两个非常简单的辅助函数。希望这会有所帮助。
;Prints to the screen all the member up to the nth member in the fibonaci sequence (define (fibo n)
(let ((i 1))
(if (= n 1)
(display 1)
(fiboHelp i n))))
;Helper function that presents Fibonaci sequence from bottom index i until upper index n
(define (fiboHelp i n)
(if (= i n)
(display(fiboMember i))
(begin
(display (fiboMember i))
(newline)
(fiboHelp (+ i 1)n))))
;Returns the nth member of the Fibonaci sequence
(define (fiboMember n)
(if (<= n 2)
(+ 1 0)
(+ (fiboMember(- n 1))(fiboMember(- n 2)))))
【讨论】: