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

  • 相关阅读:
    图论复习
    数据结构复习
    数学复习
    字符串算法复习
    还有9天就要走了
    JS 多个一维数组排例组合的所有可能
    PHP 多个一维数组排列组合的所有可能
    维护DOWNID
    LINUX
    Multiple Versions of PHP run on server
  • 原文地址:https://www.cnblogs.com/wizzhangquan/p/4375603.html
Copyright © 2020-2023  润新知