Оптимизирующие функции

Есть раздел книги, который я использую для изучения 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, моя логика не складывается с результатами. Я читаю код так:

computeFactorials(1,5), 1 означает число, с которого нужно начать, и 5 означает максимальное количество циклов. Я собираюсь начать с 3 как такового, потому что я понимаю 1 и 2 как число.

«Факториал» (3): factorial(3), затем в факториальной функции 3 вычитается 1 равным 2, а затем умножается на 3 для результата 6.

Однако, когда программа получает значение num, равное 4, это больше не имеет смысла. Потому что результат int функций factorials () должен быть равен 12, а не 24.

else result = (factorials (4-1) * 4) ;

3 * 4 = 12, а не 24. Как эта программа достигает 24, а не 12? Затем снова сделайте то же самое для num = 5, получив 120, а не 20.

Пожалуйста, помогите мне понять, я все еще очень nooby на этом языке, спасибо. 🙂

-3

Решение

затем в факториальную функцию 3 вычитается 1, равный 2, а затем умножается на 3 для результата 6

Нет.

В факториальной функции 3 «вычитается из 1», равного 2, затем это 2 передается в factorial в рекурсивном вызове:

  • factorial(2) * 3
  • = factorial(1) * 2 * 3
  • = 1 * 2 * 3
  • = 6

Результатом этого вызова является то, что умножается на 3 для результата 6.

Это (factorial(n-1) * n)не ((n-1) * n),


Однако, когда программа получает значение num, равное 4, это больше не имеет смысла, потому что результат int функций factorials () должен быть равен 12, а не 24.

Если factorial(3) 6, то factorial(4) явно не может быть только 12, потому что это только в два раза 6. Это недостаточно выросло.

  • factorial(3) * 4
  • = factorial(2) * 3 * 4
  • = factorial(1) * 2 * 3 * 4
  • = 1 * 2 * 3 * 4
  • = 24

3 * 4 = 12, а не 24

Правильно, но это не 4 факториала. 4 факториал равен 1 * 2 * 3 * 4.

Я подозреваю, что вы наполовину сбиты с толку факториал с последовательность Фибоначчи.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector