我正在用另一个(应该很容易)的任务摆弄它。
复利......(公式已知) 计划......(一年内一切都运作完美)
问题:需要蓄能器...... 我的程序必须能够记住前一个计算的结果,并将其作为下一个计算的蓝图。
我的问题出现了:如何在没有列表的情况下设置准备程序.... 或者我现在是致命的错误,我必须使用它们吗?
不知怎的,我将不得不一次又一次地调用递归程序......
非常感谢, 真诚的,Andreas_P
Andreas_P
答案 0 :(得分:2)
阅读你的问题让我有点头晕。我有一堆答案,但我觉得你不太确定你的问题是什么。
我真正的建议是How To Design Programs的慷慨帮助。具体来说,您需要从第一步开始,然后确定您的程序接收和生成的内容,并写一个输入如何映射到输出的单行描述。
一如既往,为任何违法行为道歉。
答案 1 :(得分:0)
你的意思是:
(define (fv n pv r)
(if (= n 0)
pv
(fv (- n 1) (* pv (+ 1 r)) r)))
其中pv
的值被句点末尾的值替换,并且每个递归减少一个句点的数量。
SICP很好地介绍了如何构造递归 - 值得一读。
答案 2 :(得分:0)
非常感谢您的回答。
;; [没有真正的DBC!]
;;合同:复利:数字编号 - >数
;;目的:此功能必须创建“复利”计算方法,
;;当递归调用复合兴趣函数最多x次时。
;;例子:( compound-interest 1000 1.05 360)//应该产生1050左
(定义(复利 - 利息资本利率 - 利息 - 时间)
(条件;
[(兴趣时间> = 3600)资本];
[其他;
(*利率(复利息资本利率( - 利息时间360)))];
);
);
(check-within(compound-interest 2000 1.05 360)2100 0.1);
(check-within(compound-interest 2000 1.05 720)2205 0.01);
(check-within(compound-interest 2000 1.05 1080)2315.25 0.001);
(签到(compound-interest 2000 1.05 1440)2431.0125 0.0001);
(签到(compound-interest 2000 1.05 1800)2552.563125 0.00001);
(check-within(compound-interest 2000 1.05 2160)2680.19128125 0.000001);
(签到(compound-interest 2000 1.05 2540)2814.20084531 0.0000001);
(签到(compound-interest 2000 1.05 2900)2954.91088758 0.000000001);
;(compound-interest 2000 1.05 3260)
;(compound-interest 2000 1.05 3600)
起初你是对的,我走错了轨道...关于蓄电池与否......
然后一位同学解释了我为什么,这就是结果。
嗯,[第一个评论者]:是的它看起来非常相似,但因为它是SICP
由于没有在DrRacket中安装SICP校正模块,我计划在6.001 MIT我无法实际使用。
嗯[第二个评论者]:可能你是对的,我应该更多地了解细节
在我们的教师中阅读更多关于“记忆功能”的内容。
最后但同样重要的是,感谢您的回答,我现在觉得(有点)开明解决并关闭这个“线程”。
度过美好的一天...... [极客们] Andreas_P
答案 3 :(得分:0)
;interest:number -> number
(define (interest x)
(or(if(and(> x 0)(< x 1000))(* .04 x))(if(and(> x 1000)(< x 5000))(* .045 x))(if(> x 5000)(* .05 x))))
(interest 500)(* .04 500)
(interest 1600)(* .045 1600)
(interest 90000)(* .05 90000)