Рекурсия. Примеры классических задач Задача 1. Вычислить

advertisement
Рекурсия. Примеры классических задач
Задача 1. Вычислить факториал числа N.
Для решения задачи рекурсивным алгоритмом необходимо знать рекуррентное правило
вычисления факториала и условие выхода из рекурсии.
N!=(N−1)! ∗ N, если N = 0, то N! = 1
//Классический способ
#include <iostream>;
#include<cmath>;
#include<fstream>;
using namespace std;
int main()
{
ifstream in;
ofstream out;
in.open("input.txt");
out.open("output.txt");
long long int n, p=1;
cin>>n;
for (int i=1; i<=n; i++)
{
p=p*i;
}
cout<<p;
in.close();
out.close();
return 0;
}
//Решение при помощи рекурсии
#include <iostream>;
#include<cmath>;
#include<fstream>;
using namespace std;
// описание рекурсивной функции
long long int fact(int k)
{
if (k==1) return 1;
else
return k*fact(k-1);
}
int main()
{
ifstream in;
ofstream out;
in.open("input.txt");
out.open("output.txt");
long long int n;
in>>n;
out<<fact(n); // Вызов
рекурсии
in.close();
out.close();
return 0;
}
Задача 2. По заданному числу N вычислить число Фибоначчи F(N)
Для решения задачи необходимо знать, что последовательностью Фибоначчи называется
последовательность чисел F0, F1, ..., Fn, ..., где
F0 = 0, F1 = 1, Fk = Fk-1 + Fk-2 (k > 1)
//Классический способ. Динамическое
программирование. Псевдокод
//Решение при помощи рекурсии.
Псевдокод процедуры
создать массив F[0...n]
F[0]←0,F[1]←1
для i от 1 до n:
F[i]← F[i−1] +F[i−2]
вернуть F[n]
Рисунок рекурсивных
вызовов для задачи
«Вычисление чисел
Фибоначчи» входит в
состав курса «Алгоритмы и
структуры данных»
https://stepic.org/lesson
Fib1 (n)
Если n ≤ 1 :
вернуть n
Вернуть Fib1(n−1) +Fib1(n−2)
Download