当n = -1时,如何摆脱此递归函数?

时间:2019-09-12 18:54:36

标签: recursion scheme

我要解决的问题是,如果每个级别都有2 ^ n个橙子,那么金字塔中有多少橙子。我认为我有解决方案的基础,但这是无限递归的。当n达到-1时如何退出此功能并显示解决方案?这是计划中的。

我用它来帮助我设置所需的东西:

(+ (expt 2 0) (+ (expt 2 1) (+ (expt 2 2) (expt 2 3))))

3是任意的,我只是用它来帮助我写出解决方案

(define oranges
    (lambda (n)
    (+ (expt 2 n) (oranges(- n 1)))))

运行此操作将不起作用,因为它是一个无限循环。

2 个答案:

答案 0 :(得分:1)

在编写递归过程时,必须有一个基本情况是强制:这是递归的退出点,否则它将无限循环。问问自己:我的手术应该何时结束?在这种情况下我应该退还什么?

在您的情况很简单的情况下,您确实在标题中写了答案:n = -1时应如何处理? (或-2-3 ...?)只需返回一个有意义的值即可!我建议0,因为我们正在做加法。

现在,在您的代码 ask 中,使用if表达式返回是否应该返回值,然后返回0-否则执行递归步骤,最终将达到基本情况。这就是我的意思:

(define oranges
  (lambda (n)
    (if (< n 0)
        0
        (+ (expt 2 n) (oranges (- n 1))))))

它按预期工作:

(oranges 3)
=> 15

答案 1 :(得分:0)

进行递归函数时,必须包含不同的部分。您需要一般情况和基本情况。您忘记了基本情况,也称为退出条件。您的退出条件是n = 0,因此您的程序将是:

(define (oranges n) 
     (cond [(= n 0) 1] 
       [else (+(expt 2 n)(oranges(- n 1)))] 
     ) 
)

已测试:

   (oranges 1)
=> 3
   (oranges 0)
=> 1
   (oranges 2)
=> 7