gpt4 book ai didi

c - 计算平方根的递归算法

转载 作者:太空狗 更新时间:2023-10-29 14:53:19 25 4
gpt4 key购买 nike

我有一段代码可以通过以下方式计算数字的平方根:

void f1(int,int);

int main(){
int i=1;
int n;
scanf("%d",&n);
f1(n,i);
getch();
return 0;
}

void f1(int n,int i){
if((n*10000)-(i*i)<=0)
printf("%f",(double)i/100);
else
f1(n,i+1);
}

我不知道为什么要使用 n*10000 - i*i。有人可以解释这段代码吗?

最佳答案

让我们考虑这个例子 n=100 .对于第一组递归,我们有 i=1,2,3,... .因此,对于这些调用,我们有 n*10000 - i*i >= 0 .然后在某个时候我们有 i=999观察 n*10000 - 999*999 >= 0 .下一个递归步骤有 i=1000我们看到 n*10000 - 1000*1000 <= 0 , 所以我们打印 (double)i / 100 , 这就是 10 .如您所见,结果只是 n=100 的平方根.

一般来说,最小的数i/100满意n*10000 - i*i <= 0n 的平方根“非常接近” ,因为以下原因:

sqrt(n*10000) = sqrt(n)*sqrt(10000) = sqrt(n)*100

我们有:

n*10000 - i*i <= 0            | +i*i
n*10000 <= i*i | sqrt both sides
sqrt(n)*100 <= i | /100
sqrt(n) <= i/100

因此,我们正在寻找最小的数字i/100大于或等于 sqrt(n)并将此数字用作 sqrt(n) 的近似值.

关于c - 计算平方根的递归算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923953/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com