所以,我有三个程序。
(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。第三个应该使用这两个方法和一个递归方式,所以如果我给(递归3 0)作为输入,它应该从3中减去1直到它为0,然后加1到0直到它为#39 ; s 3.如您所见,此代码未运行...
我认为基本情况是当达到0或在另一种情况下b达到0.对吗?
答案 0 :(得分:0)
您前两个功能没有问题。它们是经典的inc和dec功能。 Inc为增量,dec为减量。
你的“递归”函数不应该将a和b作为参数,然后使用define设置它们的值。通常,您不应该在scheme中的函数内部使用define来设置值(有这样做,在这种情况下,它不是必需的)。所以放下(定义一些东西)(定义一些东西)。 函数“递归”的主要问题是它不是递归的。 递归函数调用自身。例如,假设我重新创建了前两个函数。
(define (inc a) (+ a 1))
(define (dec a) (+ a 1))
然后我创建另一个名为recursion的函数,但我只使用一个变量进行此演示。让我们说“递归”将取数字“a”。
如果a = 5,我们只返回一个。 < ===基本情况
如果< 5,我们在新的a上增加AND调用自己。 < = recursive case
如果是> 5,我们减少一个AND在新的a上调用自己。 < = recursive case
(define (recursion a)
(if (= a 5)
a
(if (< a 5)
(recursion (inc a))
(recursion (dec a)))))
说实话,走向中央基地案通常不是你想要做的。你应该考虑“消费”你的输入。 0,空列表,或nil,或良好的基本情况。任何事情都可能是一个基本案例,但这些价值观往往会使你的思维变得清晰。
这有帮助吗?