首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何迭代此代码10次

如何迭代此代码10次
EN

Stack Overflow用户
提问于 2019-04-15 03:16:27
回答 1查看 67关注 0票数 0

以下是一个问题:

编写一个尾部递归函数,以两个非负整数P和k作为输入,并输出具有初始人口P并每年将人口乘以k的人口的前10年列表。如果需要,您的函数可以有辅助变量。

我试着用代码组成一个有十个数字的列表。我假设数字的输入是10,我试着把大小写变为空的,而不是0。有没有人对如何修复这段代码或使其变得更好有任何建议?

代码语言:javascript
运行
复制
(define (pop2 P k number)
 (cond
   [(= number 0) '()]
   [else
   (append (pop2 k (* P k)(- number 1)(list P)))]))
EN

回答 1

Stack Overflow用户

发布于 2019-04-15 03:50:23

  1. 如果在递归调用之后不需要做什么,递归函数定义是tail-recursive。但是pop2在递归调用方面有append!为了确保函数准确返回递归调用返回的内容,这将使用函数(累加器)的额外参数来跟踪结果。
  2. 在递归调用中,参数与其对应的含义不匹配,还有一个额外的arg:
代码语言:javascript
运行
复制
(pop2    k    (* P k)    (- number 1)   (list P))
(pop2    P    k          number         ???)

以下是一些可以让你开始的事情:

代码语言:javascript
运行
复制
;; 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 (因为它保持不变)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55682168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档