#include <iostream>
using namespace std;
int fakt (int n)
{
int v = 1;
for (int i = 1; i <= n; i++)
{
v = v * i;
}
return v;
}
int komb (int n, int k)
{
return fakt(n) / ( fakt(n - k) * fakt(k) );
}
#include <iomanip>
int main()
{
for (int n = 0; n <= 10; n++)
{
for (int k = 0; k <= n; k++)
{
cout << setw (3) << komb(n, k) << setw (1) << " ";
}
cout << endl;
}
cout << "O.K." << endl;
}
#include <iostream>
#include <iomanip>
using namespace std;
int fakt (int n)
{
if (n <= 1)
{
return 1;
}
else
{
return n * fakt(n - 1);
}
}
int komb0(int n, int k)
{
return fakt(n) / (fakt(n - k) * fakt(k));
}
int komb(int n, int k)
{
int v = 1;
if (k > n / 2)
{
k = n - k;
}
for (int i = n; i > n - k; i--)
{
v = v * i;
}
for (int i = k; i > 1; i--)
{
v = v / i;
}
return v;
}
const int N = 20;
int p [N];
int faktorial(int n)
{
int v = 0;
if (n >= 0 && n < N)
{
v = p[n]; // vyzvednou z tabulky
if (v == 0) // pokud nebylo dosud vypocitano
{
int k = n;
while (k>=0 && p[k] == 0)
{
k--;
}
// k == -1 || k>=0 && p[k] != 0
if (k == -1) // neznam ani 0!
{
p[0] = 1; // znam 0!
k++;
}
while (k < n)
{
// p[k] obsahuje predpocitanou hodnotu
p[k + 1] = (k + 1) * p[k];
k++;
}
// p[n] obsahuje predpocitanou hodnotu
v = p[n]; // vysledek
}
}
return v;
}
int main()
{
for (int i = 0; i < N; i++)
{
p[i] = 0; // p[i] == 0 ... nezname i!
}
for (int i = 1; i <= 5; i++)
{
cout << i << " " << faktorial(i) << endl;
}
for (int i = 13; i >= -1; i--)
{
cout << i << " " << faktorial(i) << endl;
}
/*
for (int n = 0; n <= 10; n++)
{
for (int k = 0; k <= n; k++)
{
cout << setw (3) << komb(n, k) << setw (1) << " ";
}
cout << endl;
}
*/
cout << "O.K." << endl;
}