计算C中的嵌套根

标签 c recursion sqrt

我被要求仅使用递归来计算以下嵌套的根表达式。

enter image description here

我在下面编写了可行的代码,但他们只允许使用一个函数和1个输入n来实现此目的,而不是像我以前使用的2个代码。
有人可以帮我将这段代码转换成一个可以计算表达式的函数吗?除了<math.h>中的函数,不能使用任何库。

n = 10的输出:1.757932

double rec_sqrt_series(int n, int m) {
    if (n <= 0)
        return 0;
    if (m > n)
        return 0;
    return sqrt(m + rec_sqrt_series(n, m + 1));
}

double helper(int n) {
    return rec_sqrt_series(n, 1);
}

最佳答案

使用n的高位作为计数器:

double rec_sqrt_series(int n)
{
    static const int R = 0x10000;
    return n/R < n%R ? sqrt(n/R+1 + rec_sqrt_series(n+R)) : 0;
}

自然,当初始nR或更大时,该功能就会出现故障。这是一个更复杂的版本,适用于n的任何正值。有用:
  • n为负数时,它与上述版本类似,使用高位进行计数。
  • n为正数时,如果它小于R,它将使用-n调用自身以评估函数,如上。否则,它将使用否定的R-1进行自身调用。这将评估函数,就好像是使用R-1调用了该函数一样。这会产生正确的结果,因为该序列仅在几十次迭代后就停止以浮点格式更改-较深数的平方根被稀释,因此没有作用。因此,对于所有n,该函数在较小的阈值上都具有相同的值。
  • double rec_sqrt_series(int n)
    {
        static const int R = 0x100;
        return
            0 < n ? n < R ? rec_sqrt_series(-n) : rec_sqrt_series(1-R)
                  : n/R > n%R ? sqrt(-n/R+1 + rec_sqrt_series(n-R)) : 0;
    }
    

    关于计算C中的嵌套根,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61031584/

    相关文章:

    c - 在输出的字符串中搜索单词

    c++ - 这个插值搜索实现有什么问题?

    c++ - C++中退出递归栈

    javascript - MD5 Bruteforce,从 Python 转换为 Javascript 的问题

    c++ sqrt保证精度,上限/下限

    c - 对 sqrt 的 undefined reference

    c - 使用过程为变量赋值

    c - 了解 shell 实现中的命令执行

    python - 哪个代码删除了排列中的重复组合

    C++ 碰撞检测