搞定了工作,继续做习题:)
题1.37:无穷连分式的过程描述,我发现这道题用迭代比递归反而更容易写出来,递归不是那么显而易见。
递归版本:
再看迭代版本:
当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过程:
据此求出e:
题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 ))))))
( 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))
( 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 )))
(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
))
