This is an old revision of the document!
Laboratorium: klik
#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; }
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.
#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; }