如何使用递归函数找到数字的平方根?

时间:2011-08-09 19:52:07

标签: c

基本上我想创建一个递归函数来在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);  
}

1 个答案:

答案 0 :(得分: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参数的初始猜测。

您可以通过传入错误数据轻松地使堆栈溢出失败,但您可能不会在此分配中对此进行测试。