#lang racket (define (square x) (* x x)) (define (sqrt-iter guess x) (if (good-enough? guess x) guess (sqrt-iter (improve guess x) x))) (define (improve guess x) (average guess (/ x guess))) (define (average x y) (/ (+ x y) 2)) (define (good-enough? guess x) (< (abs (- (square guess) x)) 0.001)) (define (sqrt x) (sqrt-iter 1.0 x)) (sqrt 9) 3.000000001396984 >
此为SICP中给出的实现方法,使用常规的过程调用能力实现。
下为我在C#中的实现方法。
1 static void Main(string[] args) 2 { 3 double num1; 4 int num2; 5 Console.WriteLine("请输入要开方的值:"); 6 num1 = float.Parse(Console.ReadLine()); 7 Console.WriteLine("请输入精度"); 8 num2 = Int32.Parse(Console.ReadLine()); 9 num1 = square(num1,num2); 10 Console.WriteLine(num1); 11 Console.ReadLine(); 12 } 13 static double square(double num,int num1) 14 { 15 double precision = Math.Pow(0.1, num1);//定义精度 16 double result = 1;//定义结果 17 while (Math.Abs( Math.Pow((num / result + result)/2, 2) - num) > precision)// 18 { 19 20 result = (num / result + result) / 2; 21 } 22 23 return result; 24 }
原文:http://www.cnblogs.com/Liqiongyu/p/5001513.html