2011-08-09 70 views
1

基本上我想创建一个递归函数用C来实现这一计划如何使用递归函数查找数字的平方根?

#include <stdio.h> 
main() 
{ 
    float guess=1,num,num1; 
    int i; 
    printf("enter any number:\n"); 
    scanf("%f",&num); 
    num1=num; 
    for (i=1;num1>1;i++,num1/=10); //to calculate no of digits in input 
    i=i/2; 
    printf("i:%d\n",i);    //to make a better guess 
    for (;i>0;i--,guess*=10); 
    printf("guess = %f\n",guess); 

    for (i=1;i<=10;i++)  //evaluate square root improving accuracy with each loop 
    { 
     guess=(guess+num/guess)/2; 
    } 
    printf("sqrt: %f\n",guess); 
} 
+3

Aaaand ...当你运行它时会发生什么? – 2011-08-09 19:53:38

+1

为什么它必须递归? – MRAB

+1

你需要帮助......什么? – netcoder

回答

9

事情是这样的:

#include <math.h> 
#include <float.h> 

float MySqrt(float num, float prev) 
{ 
    float next = (prev+num/prev)/2; 
    if (fabs(next-prev)<FLT_EPSILON*next) 
     return next; 
    return MySqrt(num, next); 
} 

称呼它,通过1.0如您对prev参数初始猜测。

通过传递错误数据,您可以很容易地使堆栈溢出失败,但您可能不会在此作业中对此进行测试。

+0

定点固定点* srry为双关..:)* –

+0

@yi_H我不明白。抱歉! –

+0

http://en.wikipedia.org/wiki/Fixed_point_%28mathematics%29 –