zoukankan      html  css  js  c++  java
  • 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 个项。

  • 相关阅读:
    SCCM 2007 部署软件更新
    WPF开发工具
    体验Windows Live Writer写Blog
    图像的灰度和黑白处理算法
    很有用的Sql总结转载
    WPF 体验导航窗口
    WPF 一周练
    WPF 图表
    也说Linq 分组
    WPF 体验对话框调用
  • 原文地址:https://www.cnblogs.com/wizzhangquan/p/4375603.html
Copyright © 2011-2022 走看看