В книге «Подумайте, как программист», следующая рекурсивная функция называется «очень неэффективной», и я не могу понять, почему (книга не объясняет). Кажется, нет никаких ненужных вычислений. Это из-за накладных расходов при вызове так много функций (ну одна и та же функция несколько раз) и, таким образом, настройка среды для каждого вызова функции?Почему эта факторно-рекурсивная функция неэффективна?
int factorial(int n) {
if (n == 1) return 1;
else return n * factorial(n-1);
}
Неэффективен при оптимизации не менее. – chris
В C имеется значительная накладная функция, когда не используется компилятор, который реализует оптимизацию хвостового вызова. – randomusername
Использует пространство стека O (n). Однако, учитывая, что 20! находится вне диапазона (32-битного) int, притязания на него «крайне неэффективны» в лучшем случае сомнительны. – Yuushi