1. 程式人生 > >Lisp經典算法

Lisp經典算法

efi init sdn mar class IT rate 均值 gpo

求平方根

SUCCESSIVE AVERAGING DUE TO HERON OF ALEXANDRIA
** TO FIND AN APPROXIMATION TO SQRT(X) **

  1. MAKR A GUESS G
  2. IMPROVE THE GUESS BY AVERAGING G AND X/G
  3. KEEP IMPROVING THE GUESS UNTILE IT IS GOOD ENOUGH
  4. USE 1 AS AN INITIAL GUESS

    算法思想

    (define (try guess x)
    (if (good-enough? guess x)
        guess
        (try (improve guess x) x)))
    (define (sqrt x) (try 1 x))

    參考代碼

    註:此代碼來自https://blog.csdn.net/jazz_charles/article/details/48974029

    (define (square x) (* x x)) //定義求平方  
    (define (average x y) (/ (+ x y) 2)) //定義求平均值  
    (define (sqrt x) //定義求平方根  
      (define (accurate guess) //定義判斷精確度  
           (<   (abs (-  (square guess)  x)) 0.001))  
      (define (improve guess) //定義改進近似值  
          (average x  (/ x guess)))  
      (define (sqrt-iter guess) //定義主體叠代求解  
          (if   (accurate guess)  
                 guess  
                (sqrt-iter (improve guess))))  
      (sqrt-iter 1.0))  

Lisp經典算法