#include<iostream>
using namespace std;
int factorial(int x)
{
if(x == 1)
{
return 1;
}
else
{
return x*factorial(x-1);
}
}
int main()
{
cout<<factorial(5)<<endl;
}
Я не получаю часть, когда значение достигает 1. Почему программа не выводит 1 в качестве вывода, потому что когда 1 достигнут, она возвращает 1. Рассмотрим приведенные ниже шаги.Какова логика этой рекурсивной программы для поиска факториала в C++?
5*factorial(4)=5*4*factorial(3)=5*4*3*factorial(2)=5*4*3*2*factorial(1)
Так что теперь, когда значение x
становится 1 и переходит в случае, если условие становится истинным и 1 возвращается. Так почему же он не выводит 1? Разве что значение 5*4*3*2*factorial(1)
хранится где-то, а возвращаемое значение просто умножается на 5*4*3*2*1
и выдает 120?
Также объясните, что происходит, когда мы передаем 0 вместо 5, как это будет выводить 1? (0! = 1)
Я запутался, почему это даже вопрос? Вы можете легко запустить это в компиляторе и пройти через код, чтобы увидеть beviour – Leon
«... когда мы передаем 0 вместо 5, как это будет выводить 1?» - что заставило вас думать, что в этом случае выйдет 1? На самом деле это не так. Скорее всего, это просто сбой. – AnT
Если вы уже знаете, что предыдущие рекурсивные вызовы эквивалентны в последовательности '5 * 4 * 3 * 2 * factorial (1)', то какие у вас проблемы с последним шагом и понимание того, что все это '5 * 4 * 3 * 2 * 1', что составляет '120'? – AnT