嵌套根号的计算函数:

2023-12-15 05:02:34

如:输入2,3

这道题我选择用递归的来完成,代码如下:

// 定义一个函数,用于计算嵌套根号  
float sqrt_ca(double x, int n, double x0)  
{  
    // 如果嵌套次数为1,直接返回x的平方根  
    if (n == 1)  
    {  
        return sqrt(x);  
    }  
    // 否则,递归调用sqrt_ca函数,计算嵌套根号  
    else  
    {  
        float temp = sqrt_ca(sqrt(x) + x0, n - 1, x0);  
        return temp;  
    }  
}

这里有一个点值得说明:那么就是x0的作用,这个是一个比较难理解的点,看到之后可能会点蒙,我不好叙述,简单的写了递归的过程,以及如果将x0替换为x会发生什么?

我们先看错误版本的代码:

// 定义一个函数,用于计算嵌套根号  
float sqrt_ca(double x, int n)  
{  
    // 如果嵌套次数为1,直接返回x的平方根  
    if (n == 1)  
    {  
        return sqrt(x);  
    }  
    // 否则,递归调用sqrt_ca函数,计算嵌套根号  
    else  
    {  
        float temp = sqrt_ca(sqrt(x) + x, n - 1;  
        return temp;  
    }  
}

x=2,n=3,输出结果:2.29,正确的答案是1.96

我们来看一下2.29和1.96是怎么算出来的:

所以错误的点在于x的值,也就是要嵌套的值发生了改变.

对于这道题的错误版本还有很多,大多都是这个错误,因为我也是一步步改代码,调试出来的,这个递归的结构不算复杂,就是在这些细节上需要注意.

以下是对于这道题的完整解答:因为有sqrt,别忘了#include <math.h>

int main()
{
	double x;
	int n;
	printf("请输入x,n:");
	scanf("%lf,%d", &x, &n);
	printf("y=%.2f", sqrt_ca(x, n, x));
	return 0;
}

这道题就分享到这里,希望大家喜欢,如有错误,请评论区指出,谢谢.

文章来源:https://blog.csdn.net/Mrluo386/article/details/135002088
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。