Recursion 方案-递归加法/减法

Recursion 方案-递归加法/减法,recursion,scheme,Recursion,Scheme,所以,我有三个程序 (define (addition a) (+ a 1)) (define (subtraction b) (- b 1)) (define (recursion a b) (define a 10) (define b 0) (if (a > 0) (sub1 a) (add1 b)) (if (b > 0) (sub1 b) (add1 a)) 0) 第一个取一个整数并加1。第

所以,我有三个程序

(define (addition a)
  (+ a 1))

(define (subtraction b)
  (- b 1))

(define (recursion a b)
  (define a 10)
  (define b 0)

  (if (a > 0)
      (sub1 a)
      (add1 b))
  (if (b > 0)
      (sub1 b)
      (add1 a))
  0)
第一个取一个整数并加1。第二个取一个整数并从中减去1。第三个应该使用这两种方法和递归方式,所以如果我给(递归30)作为输入,它应该从3中减去1,直到它为0,然后将1加到0,直到它为3。如您所见,此代码未运行


我认为基本情况是a达到0,或者在另一种情况下b达到0。对吗?

前两个函数没有问题。它们是经典的inc和dec函数。Inc表示增量,dec表示减量

“递归”函数不应将a和b作为参数,然后使用define设置它们的值。通常,您不应该在scheme中的函数内使用define设置值(有一些let可以这样做,在这种情况下,没有必要这样做)。所以放下(定义a某物)(定义b某物)。 函数“递归”的主要问题是它不是递归的。 递归函数调用自身。例如,假设我重新创建了前两个函数

(define (inc a) (+ a 1))
(define (dec a) (+ a 1))
然后我创建了另一个名为recursion的函数,但在这个演示中我只使用一个变量。假设“递归”将取数字“a”


如果a=5,我们只返回a。很抱歉迟了回复!是的,这很有帮助:)
(define (recursion a)
    (if (= a 5)
        a
        (if (< a 5)
            (recursion (inc a))
            (recursion (dec a)))))