SICP:1.37 递归/迭代求无穷连分式
#lang racket (define (cont-frac N D k) (define (cf t) (if (= t 1) (/ (N t) (D t)) (/ (N t) (+ (D t) (cf (- t 1)))) );if );cf (cf k) );cont-frac (define (cont-frac-iteration N D k) (define (cf result t) (if (= t k) result (cf (/ (N t) (+ (D t) result));/ (+ t 1));cf );if );cf (cf (/(N k) (D k)) 1) );cont-frac-iteration (cont-frac (lambda(i) 1.0) (lambda(i) 1.0) 10) (cont-frac-iteration (lambda(i) 1.0) (lambda(i) 1.0) 10)
因为连分式本质上就是一个除法计算序列,所以题目给出 k 项连分式:
N1D1+N2⋱+NkDk
可以转换成以下等价的除法计算序列:
N1/(D1+(N2/(D2+⋯+(Nk/Dk))))
而这个除法序列又可以用一个递归表达式来表示:
cf(1)
N1/(D1+cf(2))
N1/(D1+(N2/(D2+cf(3))))
N1/(D1+(N2/(D2+(N3/(D3+cf(4))))))
⋯
N1/(D1+(N2/(D2+(N3/(D3+⋯+(Nk/Dk))))))
其中函数 cf(i) 表示连分式的第 i 个项。
posted on 2015-03-29 13:41 Zachary_wiz 阅读(246) 评论(0) 编辑 收藏 举报