This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
dydaktyka:cprog:2015:recursion-solutions [2015/11/26 12:21] pkleczek utworzono |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Rekurencja – rozwiązania ====== | ||
- | Laboratorium: **[[dydaktyka:cprog:2015:recursion|klik]]** | ||
- | |||
- | ===== Zadanie FACT ===== | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | int silnia(int n) | ||
- | { | ||
- | if (n == 0) { | ||
- | return 1; | ||
- | } else { | ||
- | return n * silnia(n - 1); | ||
- | } | ||
- | } | ||
- | |||
- | int main () | ||
- | { | ||
- | int n = 5; | ||
- | |||
- | printf("%d! = %d\n", n, silnia(n)); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> | ||
- | |||
- | ===== Zadanie PRI ===== | ||
- | |||
- | Poniższa wersja jest odrobinę bardziej elegancka w stosunku do tego, co omawialiśmy na laboratorium. \\ | ||
- | W tej wersji właściwa funkcja rekurencyjna została "opakowana" tak, aby dla końcowego użytkownika sprawdzanie "pierwszości" liczby było możliwie intuicyjne. | ||
- | |||
- | <code c> | ||
- | #include <stdio.h> | ||
- | #include <stdlib.h> | ||
- | |||
- | /* wlasciwa funkcja rekurencyjna - chodzi o to, aby wywolywac glowna funkcje | ||
- | w mozliwie intuicyjny (a wiec tylko z jedym argumentem - `n`) */ | ||
- | int pierw(int n, int i) | ||
- | { | ||
- | if (i == n) { | ||
- | // Sprawdzilismy wszystkie liczby 2, 3, ..., n-1 i... zadna nie jest | ||
- | // dzielnikiem `n`! | ||
- | return 1; | ||
- | } | ||
- | |||
- | /* else */ | ||
- | if (n % i == 0) { | ||
- | // `i` jest dzielnikiem! | ||
- | return 0; | ||
- | } | ||
- | |||
- | return pierw(n, i + 1); | ||
- | } | ||
- | |||
- | /* glowna funkcja sprawdzajaca */ | ||
- | int czy_pierwsza(int n) | ||
- | { | ||
- | if (n == 0 || n == 1) { | ||
- | return 0; | ||
- | } else { | ||
- | // sprawdz dzielniki 2, 3, ..., n-1 (tj. sprawdzanie "w gore") | ||
- | return pierw(n, 2); | ||
- | } | ||
- | } | ||
- | |||
- | int main () | ||
- | { | ||
- | int n = 4; | ||
- | |||
- | printf("Czy %d jest liczba pierwsza? - %d\n", n, czy_pierwsza(n)); | ||
- | |||
- | return 0; | ||
- | } | ||
- | </code> |