C#递归方法转换为循环

C#递归方法转换为循环,c#,C#,我编写了这个递归方法,但问题是我需要对循环执行同样的操作。 第一个是递归的,第二个是循环的,但并不好。有没有关于如何修复循环方法的建议 double SR(int n) { if (n > 1) return Math.Sqrt(2 + SR(n - 1)); else return Math.Sqrt(2); }//recursion double SR2(double n) { if(n > 1)

我编写了这个递归方法,但问题是我需要对循环执行同样的操作。 第一个是递归的,第二个是循环的,但并不好。有没有关于如何修复循环方法的建议

double SR(int n)
{
    if (n > 1)
        return Math.Sqrt(2 + SR(n - 1)); 
    else    
        return Math.Sqrt(2);  
}//recursion



double SR2(double n)
{
    if(n > 1)
    {
        do
        {
            n = Math.Sqrt(2+Math.Sqrt(n - 1));
        }
        while(n <= 1);
    }
    else
    {
        n = Math.Sqrt(2);
    }

    return n; //loop
}
double SR(int n)
{
如果(n>1)
返回数学Sqrt(2+SR(n-1));
其他的
返回数学Sqrt(2);
}//递归
双SR2(双n)
{
如果(n>1)
{
做
{
n=Math.Sqrt(2+Math.Sqrt(n-1));
}
而(n
double SRloop(int n)
{
var r=数学Sqrt(2);
对于(变量i=2;i
double SRloop(int n)
{
var r=数学Sqrt(2);

对于(var i=2;i解释Knaģ是答案:

您需要更多地掌握递归函数的概念

一般来说,递归函数具有“基”或“停止”条件的概念,即当满足指定条件时函数返回的“固定”值,否则,它将无限期地继续

转换为循环时,基本条件将成为循环的起始值。 因此在循环版本中,Math.Sqrt(2)成为n的起始值


从那里,我们循环直到达到所需的值。如何确定何时停止?在原始递归函数中,停止条件是“n解释Knaģ是答案:

您需要更多地掌握递归函数的概念

一般来说,递归函数具有“基”或“停止”条件的概念,即当满足指定条件时函数返回的“固定”值,否则,它将无限期地继续

转换为循环时,基本条件将成为循环的起始值。 因此在循环版本中,Math.Sqrt(2)成为n的起始值


从那里,我们循环直到达到所需的值。如何确定何时停止?在原始递归函数中,停止条件是“n两个函数的输出应相等,因为输出不相等,所以不好”不好,因为它不符合我的要求从家庭作业的问题开始不是一个好地方。两者的输出应该相等不好,因为输出不相等“不好,因为它没有做我想做的事,”这不是一个关于家庭作业问题的好地方。谢谢,它解释了一切。它给了我相同的输出。递归方法总是运行一次,所以这是不一样的。谢谢,它解释了一切。它给了我相同的输出。递归方法总是运行一次,所以这是不一样的。
double SRloop(int n)
{
    var r = Math.Sqrt(2);

    for (var i = 2; i <= n; i++)
    {
        r = Math.Sqrt(2 + r);
    }

    return r;
}