方案R5RS,递归还是迭代?

Joh*_* NG 0 iteration recursion scheme

我编写了一个带有2个函数的方案代码,这些函数加上参数1,并从参数中减去1.我现在编写了一个自动执行此操作的函数,但我不知道它是递归还是迭代.这是整个代码:

(define add1?     
  (lambda (x)?      
    (+ x 1)))

(define sub1?     
  (lambda (x)?    
    (- x 1)))

(define plus?    
  (lambda (x y)?    
    (if (zero? y)?    
        x?    
        (plus (add1 x) (sub1 y)))))
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,加上什么样的功能?递归,或迭代,为什么?

Ósc*_*pez 5

从语法上讲,plus函数是递归的:显然,它正在调用自身.有趣的问题是:它产生了什么样的过程?鉴于它是以尾递归方式编写的(直观地说:在递归调用之后没有什么可做的),我们可以声明它生成的过程是迭代的.有关过程及其生成过程的更详细讨论,请参阅SICP.