Вычисление квадратного корня n число раз

Разбираясь с циклами возник вопрос вычисление корня n число раз. Выглядеть это должно так:

цикл

Требуется реализовать именно циклом, без рекурсии.


Ответы (1 шт):

Автор решения: A K

Итеративно, без стека -- просто один цикл:

public double Sqrtn(double num, int count)
{
    double result = Math.Sqrt(num);
    
    for (int i = 0; i < count; i++)
    {
        result += num;
        result = Math.Sqrt(result);
    }
    
    return result;
}

Вычисление начинаем "изнутри" формулы и проводим нужное число раундов, выходя "наружу".

Первые несколько итераций для двойки

for (int i = 1; i < 10; i++)
{
    Sqrtn(2, i).Dump();
}

дадут такие ответы:

1,8477590650225735
1,9615705608064609
1,9903694533443939
1,9975909124103448
1,9993976373924085
1,999849403678289
1,9999623505652022
1,9999905876191524
1,9999976469034038

На 27мой итерации выдаёт ответ 2 - это отражение того математического факта, что ваша формула стремится к тому числу, которое стоит под корнем.

Рекурсивная версия:

public double Sqrtn(double num, int count)
{
    double result = num;
    
    if(count <= 1)
        return Math.Sqrt(result);
        
    return Math.Sqrt(result + Sqrtn(result, count - 1));
}

Первые ответы те же:

1,4142135623730951
1,8477590650225735
1,9615705608064609
1,9903694533443939
1,9975909124103448
1,9993976373924085
1,999849403678289
1,9999623505652022
1,9999905876191524
→ Ссылка