Recursion 有人能解释一下递归在这些过程中是如何工作的吗

Recursion 有人能解释一下递归在这些过程中是如何工作的吗,recursion,lisp,scheme,sicp,mit-scheme,Recursion,Lisp,Scheme,Sicp,Mit Scheme,这是使用麻省理工学院的方案,来自臭名昭著的SICP。我就是不知道发生了什么事。 这里有一个计算N的过程 (define (factorial n) (if (= n 0) 1 (* n (factorial (- n 1))))) 这里有一个计算斐波那契的过程 (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1))

这是使用麻省理工学院的方案,来自臭名昭著的SICP。我就是不知道发生了什么事。 这里有一个计算
N的过程

(define (factorial n)
     (if (= n 0)
          1
          (* n (factorial (- n 1)))))
这里有一个计算斐波那契的过程

(define (fib n)
   (cond ((= n 0) 0)
         ((= n 1) 1)
   (else (+ (fib (- n 1))
            (fib (- n 2))))))

在SICP的书中有一个清晰的,一步一步的解释如何工作(对于阶乘例子),还有一个很好的解释,包括一个漂亮的树图详细说明(对于斐波那契例子)


如果您需要一个更容易理解的解释,说明递归在Scheme程序中通常是如何工作的,我建议您看一看或者,这两本书都会教您如何在一般情况下摸索递归过程。

递归需要一些时间来理解,所以请耐心等待


我建议把你想象成一台计算机,然后逐步了解如何计算
(阶乘4)
。通过将
(阶乘4)
(阶乘3)
(等)视为完全不同的实体,允许自己同时多次“进入”一个函数。

您在其他语言中见过递归吗?了解您的问题是关于Scheme中的递归还是关于一般的递归可能会有所帮助。不,我没有在语言中见过递归。我只要求在scheme中使用递归。这里详细讨论了斐波那契递归:示例在C中,但这并不重要。在阶乘函数中,使用(if(=0 1),它应该是(if(=0 n)。当前版本始终返回1。