User Tools

Site Tools


dydaktyka:cprog:2015:recursion-solutions

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
dydaktyka:cprog:2015:recursion-solutions [2015/11/26 12:26]
pkleczek [Zadanie SUM]
— (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>​ 
- 
-===== Zadanie SUM ===== 
- 
-<code c> 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-int sumuj_cyfry(int n) { 
- 
-    int ostatnia_cyfra;​ 
- 
-    if (n == 0) { 
-        return 0; 
-    } 
- 
-    ostatnia_cyfra = n % 10; 
- 
-    return ostatnia_cyfra + sumuj_cyfry(n / 10); 
-} 
- 
-int main () 
-{ 
-    int n = 196; 
- 
-    printf("​Suma cyfr %d wynosi %d.\n",​ n, sumuj_cyfry(n));​ 
- 
-    return 0; 
-} 
-</​code>​ 
- 
-===== Zadanie BIN ===== 
- 
-<​code>​ 
-#include <​stdio.h>​ 
-#include <​stdlib.h>​ 
- 
-void do_binar(int n) 
-{ 
-    // Zapamietaj cyfre na danej pozycji. 
-    int r = n % 2; 
- 
-    if (n >= 2) { 
-        do_binar(n / 2); 
-    } 
- 
-    // Wypisuj cyfry "od końca",​ czyli od cyfry najbardziej znaczącej 
-    // (oznaczającej największą potęgę liczby 2). 
-    printf("​%d",​ r); 
-} 
- 
-int main() 
-{ 
-    int n = 7; 
-    do_binar(n);​ 
- 
-    return 0; 
-} 
-</​code>​ 
dydaktyka/cprog/2015/recursion-solutions.1448537168.txt.gz · Last modified: 2020/03/25 11:46 (external edit)