Nazwę zmiennej tymczasowej możesz sobie dowolnie wybrać np: x
Kod: Zaznacz cały
int catalan(int n)
{
int x = 0;
if(n <= 1) return 1;
for(int i=0; i<=n-1; i++)
{
x += catalan(i) * catalan(n-1-i);
}
return x;
}
Jeżeli chcesz zbierać w tablicy wyniki obliczeń pośrednich to program będzie wyglądał tak:
Kod: Zaznacz cały
#include <iostream>
using namespace std;
//Przy 32 bitowym typie dany i tak bedzie tylko 20 elementow
int tablicaWynikow[50] = {1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
int catalan(int n)
{
int x = 0; //Inicjacja zmiennej tymczasowej
if(n>=0 && n<50) //Zabezpieczenie aby nie czytac pamieci poza tablica
{
if(tablicaWynikow[n] > 0) return tablicaWynikow[n]; //Wynik byl juz raz wyliczony, wiec go uzyj
for(int i=0; i<=n-1; i++)
{
x += catalan(i) * catalan(n-1-i);
}
//Jak nastapi przepelnienie zmiennej to wynik dodawania bedzie ujemny
if(x < 1) throw "Przekroczono zakres wartosci jaki moze zawierac typ int!";
tablicaWynikow[n] = x; //Zapisz wynik dla aktualnej n-tej warosci Catalana
}
return x;
}
int main(int argc, char** argv)
{
int n;
cin>>n;
try {
cout<<catalan(n)<<endl;
}
catch(char * str) {
cout << "Exception raised: " << str << '\n';
}
return 0;
}
Sama oceń jak bardzo tablicowanie wyników pośrednich przyspieszyło obliczenia.