2017-02-02 135 views
0

所以,我有三个程序。计划 - 递归加/减

(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直到它为3。 ,这段代码没有运行...

我认为基础案例会是当达到0或在其他情况下b达到0。

回答

0

你前两个函数没有问题。它们是经典的inc和dec功能。 Inc用于递增和递减递减。

你的“递归”函数不应该把a和b作为参数,然后用define来设置它们的值。通常,您不应该在scheme中的函数中使用define来设置值(可以这样做,在这种情况下,这不是必需的)。所以放下(定义一个东西)(定义一些东西)。 函数“递归”的主要问题是它不是递归的。 递归函数自己调用。例如,让我说我重新创建你的前两个函数。

(define (inc a) (+ a 1)) 
(define (dec a) (+ a 1)) 

然后我创建另一个函数称为递归,但我只是使用一个变量为这个演示。假设“递归”将采用数字“a”。

如果a = 5,我们只返回一个。 < ===基地案例

如果一个< 5,我们增加并呼吁我们在新的a。 < =递归的情况

如果a> 5,我们在新的a上递减并调用自己。 < =递归的情况下

(define (recursion a) 
    (if (= a 5) 
     a 
     (if (< a 5) 
      (recursion (inc a)) 
      (recursion (dec a))))) 

要真正的公平,朝向中心基本情况一般移动是不是你想要做什么。你应该考虑'消费'你的投入。 0,空列表,或零,或好的基本情况。任何事情都可以成为一个基本案例,但这些价值观倾向于使您的思维趋向一个明确的算法。

这有帮助吗?

+0

对不起,回复迟! 是的,那帮助:) – kimbert007