sicp 习题1.37,1.38解答

    搞定了工作,继续做习题:)
    题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 ))


你可能感兴趣的:(sicp 习题1.37,1.38解答)