Существует раздел книги, которую я использую для изучения C++, в которой рассказывается об оптимизации функций.Функции оптимизации
Код выглядит следующим образом:
#include <iostream>
using namespace std;
int computeFactorials(int, int);
int factorial(int);
int main() {
computeFactorials(1, 5);
return 0;
}
int computeFactorials(int num, int max) {
cout << "Factorial of " << num << ": ";
cout << factorial(num) << endl;
num++;
if(num > max)
return 0;
else
computeFactorials(num, max);
}
int factorial(int n) {
int result;
if (n == 1)
result = 1;
else
result = (factorial(n-1) * n);
return result;
}
Вот выполнение программы:
Factorial of 10: 3628800
C:\MyPrograms\c++ optimize.cpp -o optimize.exe
C:\MyPrograms>optimize
Factorial of 1: 1
Factorial of 2: 2
Factorial of 3: 6
Factorial of 4: 24
Factorial of 5: 120
я могу следовать до Num == 3, но когда дело доходит до 4 моя логика Безразлично» t добавить результаты. Я читаю код следующим образом:
computeFactorials(1,5)
, 1 означает, что число начинается, а 5 означает максимальное количество циклов. Я начну с 3-х, потому что я понимаю 1 и 2 как число.
«Факториал» (3): factorial(3)
, то в функции факториала 3 вычитается 1, равный 2, а затем умножается на 3 для результата 6.
Однако, когда программа попадает в пит равное 4, похоже, это уже не имеет никакого смысла. Поскольку Int результат факториалов() функции должны быть равны 12 не 24.
else result = (factorials (4-1) * 4) ;
3 * 4 = 12, а не 24. Как эта программа получает до 24, а не 12? Затем снова делайте то же самое на num = 5, получая 120, а не 20.
Пожалуйста, помогите мне понять, я по-прежнему очень полезен на этом языке, спасибо. :)
Чтобы понять рекурсию, вам сначала нужно понять рекурсию ;-) –
@Roger Первое правило о рекурсии состоит в том, что вы не говорите об рекурсии. –
@remyabel aaaaargh - я испортил мое условие прекращения ... извините (извините (извините (извините))) –