9.4. Napisati rekurzivne funkcije koja ispisiju dekadne cifre datog cijelog broja, a zatim ispisiju dekadne cifre datog celog broja u obrnutom redoslijedu. Test primjer:
1234567
1 2 3 4 5 6 7
7 6 5 4 3 2 1.

Opis programa: Funkcija izdvoji_cifru: Za ispis cifara slijeva u desno prvo se izvodi izdvajanje svih cifara izdvoji_cifru(n1/10), pa ispis cifara.
Funkcija izdvoji_cifru: Izdvojena cifra se odmah štampa pa se onda izdvaja slijedeća cifra.

Tabela 1. Izdvojenu cifru poredi sa tekućim maksimumom

Funkcija ispis Opis funkcije ispis Funkcija ispis2 Opis funkcije ispis2
izdvoji_cifru(n1/10)
Izdvaja cifru
Rekurzija funkcije za izdvajanje cifre
printf("%d ", n2%10)
Ispis izdvojene cifre
printf("%d ", n1%10)

Prvo se izvodi izdvajanje svih cifara rekurzijom (izdvoji_cifru(n1/10)) prethodna naredba;
pa se onda pri povratku Ispisu cifre.

izdvoji_cifru2(n2/10)
Prvo se izvodi ispis izdvojene cifre (prethonda naredba);
Pozivom funkcije - rekurzija izdvaja se slijedeća cifra
if (n1 < 10)
  printf("%d ", n1);
Provjera da li završeno izdvajanje cifara?
Na kraju rekurzije počinje ispis izdvojenih cifara
if (n2 < 10)
  printf("%d ", n1);
Provjera da li ima još cifara?
Na kraju rekurzije završava ispis izdvojenih cifara.

Listing programa:

// 09411128
#include <stdio.h>

void izdvoji_cifru(int n1)  {
    if (n1 < 10)                // posljednja cifra sdesna?
        printf("%d ", n1);      // na kraju rekurzije pocinje ispis izdvojenih cifara
    else
    {
        izdvoji_cifru(n1/10);   // smanji broj; novo izdvajanje cifara;
        printf("%d ", n1%10);   // ispis cifre dobijene u ovom prolazu kroz funkciju
    }
}

void izdvoji_cifru2(int n2) {
    if (n2 < 10)                //  posljednja cifra sdesna?
        printf("%d ", n2);      //  na kraju rekurzije posljednji ispis
    else
    {
        printf("%d ", n2%10);   // ispis cifre dobijene u ovom prolazu kroz funkciju
        izdvoji_cifru2(n2/10);  // smanji broj; novo izdvajanje cifara;
    }
}

int main()
{
    int n;
    printf("Broj: ");
    scanf("%d", &n);
    printf("Cifre su: ");
    izdvoji_cifru(n);
    printf("\n");
    printf("Obrnut redoslijed: ");
    izdvoji_cifru2(n);
    return 0;
}


Ispis na ekranu:
Broj: 1234567
Cifre su: 1 2 3 4 5 6 7
Obrnut redoslijed: 7 6 5 4 3 2 1

Index