Язык Си в примерах/Степень числа: различия между версиями

Содержимое удалено Содержимое добавлено
Отмена правки 76806, сделанной участником 178.122.63.155 (обс.)
м Замена <tt /> на <code />; избыточные <big /> и <font /> вокруг <source />; {{SUBPAGENAME}}; пробелы.
Строка 7:
Вот программа, которая основана на этой формуле:
 
<big><source lang="c">
/*
Степень числа: простая рекурсия
Строка 27:
}
}
</source></big>
Приведёный выше пример не будет работать для отрицательных показателей степени (см. третью строку функции "power").
Правильнее было бы так:
<big><source lang="c">
/*
Степень числа: простая рекурсия
Строка 50:
}
}
</source></big>
 
Но есть более «умная» рекурсивная функция:
Строка 66:
первой рекурсией вычисляется за 10000 шагов, а второй -- за 19 шагов.
 
<big><source lang="c">
/*
Программа 2: степень числа -- оптимизированная рекурсия.
Строка 78:
return power(x * x, n / 2);
}
</source></big>
 
<big><source lang="c">
/*
Программа 3: cтепень числа -- оптимальный алгоритм без рекурсии.
Строка 99:
return a;
}
</source></big>
* Напишите программу, вычисляющую double в степени double.
* Сколько шагов требуется для вычисления <math>a^{30}\,\!</math> вторым методом?
* Покажите, что второй алгоритм выполняется за логарифмическое по n число шагов, а точнее ограничено сверху <math>2\cdot \log_2 n\,\!</math> (еще точнее: в точности равно числу знаков в двоичной записи числа n плюс число единичек в этой записи).
* Объясните, как работает программа 3.
[[Категория:Язык Си в примерах|Степень числа{{SUBPAGENAME}}]]