Recursion Fibonacci格式

Recursion Fibonacci格式,recursion,scheme,racket,fibonacci,Recursion,Scheme,Racket,Fibonacci,我试图理解Scheme中的递归,但我很难对它进行试运行,例如一个简单的斐波那契数问题 有人能帮我把添加的步骤分解一下吗 (define (fib n) (if (<= n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) (定义(fib n) (如果(如标签所示,如果您使用的是Racket,则您有一个内置的步进器 将程序输入DrRacket,然后单击右上菜单中的步骤: 然后将打开一个步进器窗口。单击“一步一步”按钮,您可以浏览程序

我试图理解Scheme中的递归,但我很难对它进行试运行,例如一个简单的斐波那契数问题

有人能帮我把添加的步骤分解一下吗

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

(如果(如标签所示,如果您使用的是Racket,则您有一个内置的步进器

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

然后将打开一个步进器窗口。单击“一步一步”按钮,您可以浏览程序的执行过程

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

在伪代码中,
fib(n)=n1;else->fib(n-1)+fib(n-2)
=>(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)))))
;将所有成员打印到屏幕上,直到fibonaci序列中的第n个成员(定义(fibo n))
(让((i)1))
(如果(=n1)
(显示1)
(fiboHelp i n)
;辅助函数,表示从下索引i到上索引n的Fibonaci序列
(定义(fiboHelp i n)
(如果)
(显示(fiboMember i))
(开始
(显示(fiboMember i))
(新行)
(fiboHelp(+i1)n)))
;返回Fibonaci序列的第n个成员
(定义(fiboMember n)
(如果(