Program For Factorial Using Recursive Function
И самое банальное вешающее систему: Код C Тут вы совершенно правы. Рекурсия - чрезвычайно изящная, но и столь же опасная штука. Я прекрасно понимаю стремление преподавателей обьяснить ее на несколько экзотичном факториале.
Но сам, конечно, никогда в жизни вещи, которые можно вычислить иттерационно, не стану делать рекурсивно. Рекурсия использует стек, чье поведение слабо контролируется, и который жрет самое дорогое - память (причем, бесконтрольно).
Ну что произойдет, если я иттерационной функции fact дам на вход слишком большое число? Ну, будет неверный результат (такой же будет и у рекурсивной, если она сумеет доработать). А рекурсивная fact просто вылетит с трудно понимаемыми сообщениями. Кстати, Д.Кнут в своей попытке энциклопедии явно рекурсивные алгоритмы реализовывал БЕЗ рекурсии! Правда, ему пришлось вводить такие массивы, как Stek1, StekOut и т.п. Добавлено через 12 минут Не думаю, что Д.Кнут не знал о рекурсии. Конечно, прекрасно знал!
Но он рассматривал свою энциклопедию, как Учебник, и не хотел учить ОПАСНОМУ. А вот чего он, кажется, не знал, так это СТРУКТУР (ничего не говоря уже о классах), поэтому его великолепные алгоритмы выглядят весьма неуклюже.
C++ Program to find the Factorial using recursive function. Перевести Показать оригинал. C++ Program to find the Factorial using recursive function. Нет комментариев.
Да, все это складывается и раскручивается в обратном порядке. Я тут порезвился на тему заполнения и выгрузки стека вызовов, при рекурсии. Вы уж простите. Бываю несдержан. Конечно, теоретически (гипотетически), мудрый компилятор смог бы скомпилировать даже инлайн-функцию, в последовательный код при, наперед, известном количестве рекурсий (тривиально и не бывает), но на практике даже это, скорее всего не случается. Поэтому использование стека, путем сохранения промежуточных результатов, напоминает фрагменты активационных записей для нерекурсивных (обычных) функций. При итеративных (последовательных) вызовах обычных функций, заполнение и очистка стека происходит обычным образом и это безопаснее.
Не напоминает, а это они есть: записи активаций, они же фреймы стека, хранящие локальные переменные функций, которые ещё не завершили работу (активны) и могут вернуть результат. Но очистка от такой записи происходит лишь когда функция полностью заканчивает вызов. То есть когда функция с типом возврата выполняет команду return. Xyla инструкция поросятами. А в записи ведь не только локальные переменные и аргументы. Хорошо когда как в функции n! Одна локальная переменная n, а если там, хотя бы, более или менее, сложное арифметическое выражение из локальных переменных? Вообще, у меня сложилось впечатление, что рекурсия реализована для сохранения возможностей С, где ее мощь проявляется в работе с битами и количество вызовов ограничено разрядностью обрабатываемого числа, например.
удобный пример для объяснения и понимания. Вот еще темы с ответами: Пользователь вводит число и программа считает его факториал.
= 5.4.3.2.1 = 120. Кто не помнит факториал считает так.
Дано натуральное число n; найти n! Использовать программу, включающую рекурсивную процедуру вычисления n! Дано целое число N (0). Используя один цикл, найти сумму 1!+2!+3!+.N!
- N-факториал- обозначает произведение всех целых. Нада зделать прогу штоби она виводила таким образом X 2 4 6 8 10 а Y 2! Тоисть факториал от Х зделайте плз оч надо на С/С Или воспользуйтесь поиском по форуму.