#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 个项。
时间: 2024-11-05 14:50:44