Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- int fact(int);
- int fact_r(int);
- int fact_s(int);
- int fib_r(int);
- int fib_ar(int);
- int fib_arr(int);
- int fib_arr_mem(int);
- int sigma(int from, int to, int(*func)(int));
- int main()
- {
- char a;
- int n, x;
- cin >> x;
- cout << "";
- cin >> n;
- switch (x) {
- case 1:
- {
- cout << fact(n);
- break;
- }
- case 2:
- {
- cout << fact_s(n);
- break;
- }
- case 3:
- {
- cout << fib_r(n);
- break;
- }
- case 4:
- {
- cout << fib_ar(n);
- break;
- }
- case 5:
- {
- cout << fib_arr(n);
- break;
- }
- case 6:
- {
- cout << fib_arr_mem(n);
- break;
- }
- case 7:
- {
- cout << sigma(1, n, fact_r);
- break;
- }
- }
- cin >> a;
- return 0;
- }
- int fact(int n)
- {
- int sum = 0;
- int f = 1;
- if (n < 0)
- return 0;
- for (int i = 1; i <= n; i++)
- {
- f = f * i;
- sum = sum + f;
- }
- return sum;
- }
- int fact_r(int n)
- {
- if (n < 0)
- return 0;
- if (n <= 1)
- return 1;
- return n * fact_r(n-1);
- }
- int fact_s(int n)
- {
- if (n < 0)
- return 0;
- if (n <= 1)
- return 1;
- return fact_s(n - 1) + fact_r(n);
- }
- int fib_r(int n)
- {
- if (n <= 2 && n > 0)
- return 1;
- return fib_r(n - 1) + fib_r(n - 2);
- }
- int fib_ar(int n)
- {
- int* ar = new int[n];
- ar[0] = 1;
- ar[1] = 1;
- for (int i = 2; i < n; i++)
- {
- ar[i] = ar[i - 1] + ar[i - 2];
- }
- return ar[n - 1];
- }
- int fib_arr(int n)
- {
- int* ar = new int[n];
- for (int i = 0; i <= n; i++) {
- ar[i] = 0;
- }
- ar[0] = 1;
- for (int i = 0; i - 2 < n && i - 2 < n; i++)
- {
- ar[i + 1] += ar[i];
- ar[i + 2] += ar[i];
- }
- return ar[n - 1];
- }
- int fib_arr_mem(int n)
- {
- static int* ar = new int[n];
- static int n_array;
- static int f;
- if (!f)
- {
- n_array = 2;
- for (int i = 0; i <= n; i++)
- {
- ar[i] = 0;
- }
- ar[1] = 1;
- ar[2] = 1;
- f = 1;
- }
- if (n <= n_array)
- return ar[n];
- ar[n] = fib_arr_mem(n - 1) + fib_arr_mem(n - 2);
- n_array = n > n_array ? n : n_array;
- return ar[n];
- }
- int sigma(int from, int to, int(*func)(int))
- {
- int sum = 0;
- while (from <= to)
- sum += (*func)(from++);
- return sum;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement