我要解决的问题是,如果每个级别都有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)))))
运行此操作将不起作用,因为它是一个无限循环。
答案 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