【SICP练习】7 练习1.11



这种题目太像是数学题目了,不过拿到编程上又有一些的难度。我们先根据题目中的条件,写出类似于第25页最下面的变换规则。我们先列出如下内容:

a-- f(n-1) f(2) f(3)  f(4) f(5)

b-- f(n-2) f(1) f(2)  f(3) f(4)

c—f(n-3) f(0) f(1)  f(2) f(3)

于是继而得出下式:

a—a+2b+3c

b—a

c—b


也就是说,当n=5时,a为f(4),而根据题目条件f(4)=f(3)+2f(2)+3f(1),而上面的式子中f(4)正好和前一列的f(3)、f(2)、f(1)可以建立起联系。于是乎,每下一次迭代中的a都是由上一次的a+2b+3c转换过来的;同理,对于b和c也是这样的。将计算的过程罗列出来,系统的分析有助于我们解决问题。感谢裴同学的提醒,在博客上加上这一段解释。


于是核心部分已经出来了:

(f-iter (a+2b+3c) a b (- counter 1))

最终写成代码即可:

(define (f n)

        (f-iter1 0 0 n))

(define (f-iter a b c count)

        (if(= counter 0)

          b

          (f-iter (+ a (* 2 b) (* 3 c)) a b (- count1))))

类比其实是一个很好的学习方法,在博主的【Scheme归纳】3中,通过类比学习了几个很重要的关键字。

版权声明:本文为 NoMasp柯于旺 原创文章,如需转载请联系本人。

转载于:https://www.cnblogs.com/NoMasp/p/4786223.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值