码迷,mamicode.com
首页 > 其他好文 > 详细

SICP:1.37 递归/迭代求无穷连分式

时间:2015-03-29 15:00:48      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

#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 个项。

SICP:1.37 递归/迭代求无穷连分式

标签:

原文地址:http://www.cnblogs.com/wizzhangquan/p/4375603.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!