我使用牛顿公式求一个数x的立方根,首先用y去测试,如果y^3不够接近,则让y=((x/y^2)+2y)/3 ,继续递归测试,直到找到足够接近的立方根。
这是我的scheme 代码:
(define (close-to x y) (< (abs (- x y)) 0.0001))
(define (cube x) (* x x x))
(define (cube-improve x y) (/ (+ (* 2 y) (/ x (square y))) 3))
(define (curt-recur x y) (if (close-to x (cube y)) y (curt-recur x (cube-improve x y))))
(curt-recur 500 1)
然后我在DrRacket上运行,程序一直在执行,不出结果......速度貌似很慢。
然后我同样思路编了一个C++程序测试:
#include<iostream>
using namespace std;
double abso(double num){
if(num<0)
return (-1)*num;
else
return num;
}
double cuberoot(double num, double guess){
if(abso(guess*guess*guess-num)<0.0001){
return guess;
}
else {
return cuberoot(num, (guess*2+num/guess/guess)/3);
}
}
int main(){
double a,b;
while(cin>>a>>b){
cout<<cuberoot(a,b)<<endl;
}
}
我输入 500 1,很快就算出结果来了。
这是为什么?是我scheme程序编错了?还是别的原因?