Рекурсия Простейшие рекурсивные алгоритмы


Download 239.47 Kb.
Sana11.01.2023
Hajmi239.47 Kb.
#1087772
Bog'liq
4 Лаборатория



Рекурсия

Простейшие рекурсивные алгоритмы


Задания этого раздела можно легко решить и без использования рекурсии. Данное обстоятельство связано с тем, что в заданиях рассматриваются простейшие примеры рекурсии, легко сводимые к итерационным алгоритмам. Более того, в некоторых случаях непосредственные вычисления по рекурсивным формулам оказываются весьма неэффективными (см., например, задания Recur4 и Recur6). Однако именно на подобных примерах проще всего получить первоначальные навыки разработки рекурсивных алгоритмов.
Recur2. Описать рекурсивную функцию Fact2(N) вещественного типа, вычисляющую значение двойного факториала
N!! = N·(N−2)·(N−4)·...
(N > 0 — параметр целого типа; последний сомножитель в произведении равен 2, если N — четное число, и 1, если N — нечетное). С помощью этой функции вычислить двойные факториалы пяти данных чисел.

Double Fact2(int N)


{
if(N <= 1)
return 1;
If(N == 2)
return 2;
return N * Fact2(N – 2);
}

Recur4. Описать рекурсивную функцию Fib1(N) целого типа, вычисляющую Nэлемент последовательности чисел Фибоначчи (N — целое число):
F1 = F2 = 1, FK = FK−2 + FK−1, K = 3, 4, ... . С помощью этой функции найти пять чисел Фибоначчи с данными номерами, и вывести эти числа вместе с количеством рекурсивных вызовов функции Fib1, потребовавшихся для их нахождения.

#include



using namespace std;
int FibRec(int N, int& count){
++count;
if (N == 1 || N == 2) return 1;
return FibRec(N - 1, count) + FibRec(N - 2, count);
}
int main(){
int m[5];
cout << "Enter 5 numbers: ";
for (int i = 0; i < 5; ++i){
cin >> m[i];
}
for (int i = 0; i < 5; ++i){
int count = 0;
cout <<"Fib" << m[i] << " = "<< FibRec(m[i], count);
cout << ", number of function calls: " << count << endl;
}
cout << endl;
system("pause");
}


Download 239.47 Kb.

Do'stlaringiz bilan baham:




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling