Rekurencja dwumianu Newtona - program przestał działać
Ostatnio zmodyfikowano 2013-12-31 18:27
The_Game Temat założony przez niniejszego użytkownika |
Rekurencja dwumianu Newtona - program przestał działać » 2013-12-31 15:24:52 Witam! Mam problem z rekurencją dwumianu Newtona. Program się po prostu wysypuje, nie wiem z jakiej przyczyny. Bardzo proszę o poradę co jest nie tak. Pozdrawiam! #include <iostream> #include <cmath> using namespace std;
unsigned long long int sil( unsigned long long int n ) { if( n < 2 ) return 1; else return n * sil( n - 1 ); }
unsigned long long int npok( unsigned long long int n, unsigned long long int k ) { if( n == 0 && n == k ) return 1; else return npok( n - 1, k ) + npok( n - 1, k - 1 ); }
int main() { int n, k; cin >> n >> k; cout << npok( n, k ); return 0; }
|
|
DejaVu |
» 2013-12-31 15:37:15 unsigned long long int npok( unsigned long long int n, unsigned long long int k ) { if( n == 0 && n == k ) return 1; else return npok( n - 1, k ) + npok( n - 1, k - 1 ); }
Przeanalizuj czy dla podawanego n, k jesteś w stanie na kartce wykonać skończoną liczbę kroków do uzyskania wyniku. |
|
The_Game Temat założony przez niniejszego użytkownika |
» 2013-12-31 18:16:36 Okej, wszystko się dobrze skończyło. Z początku myślałem, że musi być pętla w głównej części programu ale miałem po prostu złe warunki w funkcji :D. Poniżej zamieszczam gotowy kod, może się komuś przyda :) Pozdrawiam i dziękuję :) #include <iostream> using namespace std;
unsigned int npok( unsigned int n, unsigned int k ) { if( k == 0 || k == n ) return 1; if( n > 0 && k > 0 && n > k ) return npok( n - 1, k ) + npok( n - 1, k - 1 ); }
int main() { int n, k; cout << "/** OBLICZANIE DWUMIANU NEWTONA **/\n" << "Podaj n: "; cin >> n; cout << "Podaj k: "; cin >> k; cout << "Wynik: " << npok( n, k ); return 0; }
|
|
pekfos |
» 2013-12-31 18:27:12 Program ma niezdefiniowane zachowanie dla n < k, na przykład. Brakuje return na końcu npok(). |
|
« 1 » |