User Tools

Site Tools


dydaktyka:cprog:2015:recursion-solutions

This is an old revision of the document!


Rekurencja – rozwiązania

Laboratorium: klik

Zadanie FACT

#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;
}

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.

#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;
}
dydaktyka/cprog/2015/recursion-solutions.1448536882.txt.gz · Last modified: 2020/03/25 11:46 (external edit)