PLT [球拍/计划]复合兴趣+累积器 - 如何

时间:2010-07-06 11:10:43

标签: scheme racket

我正在用另一个(应该很容易)的任务摆弄它。

复利......(公式已知) 计划......(一年内一切都运作完美)

问题:需要蓄能器...... 我的程序必须能够记住前一个计算的结果,并将其作为下一个计算的蓝图。

我的问题出现了:如何在没有列表的情况下设置准备程序.... 或者我现在是致命的错误,我必须使用它们吗?

不知怎的,我将不得不一次又一次地调用递归程序......

非常感谢, 真诚的,Andreas_P

Andreas_P

4 个答案:

答案 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)