题目
分析
实际上就是递归的使用。
代码
核心代码:
/* 递归算法 */
float sqrt(float A,float p,float e) {
if(abs(p*p-A)<e) {
return p;
} else if(abs(p*p-A)>=e) {
sqrt(A,(p+A/p)/2,e);
}
}
/* 非递归算法 */
float sqrt_2(float A,float p,float e) {
while(abs(p*p-A)>=e) {
p=(p+A/p)/2;
}
return p;
}
完整代码:
#include<stdio.h>
#define maxSize 20
/* 求绝对值 */
float abs(int x) {
if(x<0) {
return -x;
} else {
return x;
}
}
/* 递归算法 */
float sqrt(float A,float p,float e) {
if(abs(p*p-A)<e) {
return p;
} else if(abs(p*p-A)>=e) {
sqrt(A,(p+A/p)/2,e);
}
}
/* 非递归算法 */
float sqrt_2(float A,float p,float e) {
while(abs(p*p-A)>=e) {
p=(p+A/p)/2;
}
return p;
}
int main() {
float A=10;
float p=3;
float e=2.3;
float r1=sqrt(A,p,e);
printf("%2.f\n",r1);
float r2=sqrt_2(A,p,e);
printf("%2.f\n",r2);
return 0;
}
运行结果: