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)))))