sicp 习题1.37,1.38解答

本文探讨了无穷连分式的迭代和递归实现方法,并通过具体例子展示了如何利用这两种方法求解数学问题。特别地,文章还讨论了当连分式中的n和d均为常数时,其值逼近黄金分割比的倒数的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    搞定了工作,继续做习题:)
    题1.37:无穷连分式的过程描述,我发现这道题用迭代比递归反而更容易写出来,递归不是那么显而易见。
递归版本:
(define (cont - frace n d k)
  (
if  ( =  k  1 )
      (
/  (n  1 ) (d  1 ))
      (
/  (n k) ( +  (d k) (cont - frace n d ( -  k  1 ))))))

再看迭代版本:
(define (cont - frace - iter n d result counter k)
  (
if  ( =  counter  0 )
      result
      (cont
- frace - iter n d ( /  (n counter) ( +  (d counter) result)) ( -  counter  1 ) k)))
(define (cont
- frace n d k)
  (cont
- frace - iter n d  0  k k))

当n d的过程都是(lambda (x) 1.0)时,趋近于1/φ(黄金分割比的倒数),通过计算可得知,当k>=11时,满足十进制的4位精度。

   题1.38在1.37的基础上,关键在于写出d过程,通过观察给出的序列可以发现,当i-2是3的倍数时,(d i)应该返回2(i+1)/3,由此先写出d过程:
(define (d i)
  (cond ((
=  i  1 1 )
        ((
=  i  2 2 )
        ((
=  (remainder ( -  i  2 3 0 ) ( /  ( *   2  ( +  i  1 ))  3 ))
        (
else
           
1 )))
 
   据此求出e:
( +   2  (cont - frace (lambda(i)  1.0 ) d  1000 ))


118031.html

dennis 2007-05-17 11:34 发表评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值