方案中的斐波那契

时间:2013-02-02 00:32:12

标签: recursion scheme racket

我正在尝试理解方案中的递归,我很难为它做干运行,例如一个简单的斐波那契数问题是否有人可以分解添加的步骤?

(define (fib n)
  (if (<= n 2)
      1
      (+ (fib (- n 1)) (fib (- n 2)))))

3 个答案:

答案 0 :(得分:6)

如果您正在使用Racket,正如您的代码所示,那么您就拥有了内置的步进器。

将程序输入DrRacket,然后单击右上方菜单中的Step:

First step http://f.cl.ly/items/341k1X2c44422e220T3I/Screen%20Shot%202013-02-01%20at%208.00.27%20PM.png

然后会打开一个步进窗口。单击“一遍又一遍”,您可以完成程序的执行。

Step by step http://f.cl.ly/items/153A28283W263z421Y12/Screen%20Shot%202013-02-01%20at%208.02.51%20PM.png

如果您希望步骤的数量更易于管理,请选择一个低于10的数字来执行跟踪。

答案 1 :(得分:4)

在伪代码中,fib(n) = n <= 2 -> 1 ; else -> fib(n-1) + fib(n-2) =&gt; ( 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

答案 2 :(得分:-1)

这是一个从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)))))