Заменить рекурсию циклом C++

Возникла следующая ситуация. Реализую свою собственную библиотеку длинной арифметики. Возникла необходимость написать функцию подсчета факториала. Немного поискав в сети алгоритмы быстрого подсчета факториала я нашел не сложный и одновременно быстрый алгоритм подсчета "деревом", вот его код:

#include <iostream>


int factorial_tree(int number_thirst, int number_second) {
    if (number_thirst > number_second)
        return 1;
    if (number_thirst == number_second)
        return number_thirst;
    if (number_second - number_thirst == 1)
        return number_thirst * number_second;
    int tmp = (number_thirst + number_second) / 2;
    return factorial_tree(number_thirst, tmp) * factorial_tree(tmp + 1, number_second);
}
int factorial(int number) {
    if (number < 0)
        return 0;
    if (number == 0)
        return 1;
    if (number == 1 || number == 2)
        return number;
    return factorial_tree(2, number);
}
int main() {
    int number;
    std::cin >> number;
    std::cout << factorial(number) << std::endl;
    return 0;
}

Я изучил этот алгоритм и встроил его в свою библиотеку. Все работает, все хорошо. Однако, в данном алгоритме используется рекурсия и я предполагаю, что при больших значениях факториала (>1000000) возможно переполнение стека. Единственное нормальное решение, которое я вижу - заменить рекурсию циклом. Я пытался это сделать - не получилось. Короче говоря, нужна помощь с заменой рекурсии на цикл в этом алгоритме.


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

Автор решения: gth-other

Вопрос закрыт. Как верно сказали в комментариях к вопросу, переполнение стека возникнет только на очень неприличных факториалах, а затраты на рекурсивные вызовы минимальны.

→ Ссылка