这个问题在这里已有答案:
这是问题:
编写尾递归函数,将两个非负整数P和k作为输入,并输出具有初始总体P的人口的前10年的列表,并且每年将人口乘以k。如果需要,您的函数可以有辅助变量。
我试图让代码形成一个包含十个数字的列表。我假设数字的输入将是10.我试图朝着使基本情况为空而不是0的方向。有人对如何修复此代码或使其更好有任何建议吗?
(define (pop2 P k number)
(cond
[(= number 0) '()]
[else
(append (pop2 k (* P k)(- number 1)(list P)))]))
pop2
在递归电话周围有append
!为了确保函数准确返回递归调用返回的内容,它使用函数的额外参数(累加器)跟踪结果。(pop2 k (* P k) (- number 1) (list P))
(pop2 P k number ???)
这可以帮助您入门:
;; pop2-acc : Nat Nat Nat [Listof Nat] -> [Listof Nat]
(define (pop2-acc P k number acc)
(cond
[(= number 0) <???>]
[else (pop2-acc P k (- number 1) <???>)]))
;; pop2 : Nat Nat Nat -> [Listof Nat]
;; initial-population (P), factor (k), years (number)
(define (pop2 P k number)
(pop2-acc P k number acc))
请注意,acc
是“迄今为止的结果”。帮手pop2-acc
可以变成pop2
中的局部函数,我们不必将k
传递到pop2-acc
(因为它保持不变)。