以下是一个问题:
编写一个尾部递归函数,以两个非负整数P和k作为输入,并输出具有初始人口P并每年将人口乘以k的人口的前10年列表。如果需要,您的函数可以有辅助变量。
我试着用代码组成一个有十个数字的列表。我假设数字的输入是10,我试着把大小写变为空的,而不是0。有没有人对如何修复这段代码或使其变得更好有任何建议?
(define (pop2 P k number)
(cond
[(= number 0) '()]
[else
(append (pop2 k (* P k)(- number 1)(list P)))]))
发布于 2019-04-15 03:50:23
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
(因为它保持不变)。
https://stackoverflow.com/questions/55682168
复制相似问题