Untitled

mail@pastecode.io avatar
unknown
c_cpp
2 months ago
2.3 kB
1
Indexable
Never
#include <stdio.h>

int sumator( int jeszczeKrokow, int sumaDotychczas );
void dwojkowo( int liczba );
void schodki( int ile, char znak );

//*****************************************************
int main()
{
    printf("Sumowanie liczb naturalnych od 0 do n. Podaj wartosc n: ");
    int n = 0;
    scanf( "%d", &n );
    printf( "\nSuma liczb naturalnych od 0 do %d to = %d\n", n, sumator( n, 0 ) );

    //----------------------------------------------------------
    // inny przykład funkcji rekurencyjnej
    //----------------------------------------------------------
    int liczba = 241;

    printf( "\n%d to dwojkowo ", liczba );
    dwojkowo( liczba );
    printf( "\n" );

    liczba = 30942;
    printf( "\n%d to dwojkowo ", liczba );
    dwojkowo( liczba );
    printf( "\n" );

    return 0;
}

//*****************************************************
int sumator( int jeszczeKrokow, int sumaDotychczas )
{
    int rezultat = 0;
    static int krokRekurencji;

    int toPietroNr = krokRekurencji;
    krokRekurencji++;
    schodki( toPietroNr, '>' );
    printf( "%d + %d = %d\n", sumaDotychczas, toPietroNr, sumaDotychczas + toPietroNr );

    // właściwa operacja sumowania
    sumaDotychczas += toPietroNr;

    // warunek zatrzymujący rekurencję ++++++++++++
    if( jeszczeKrokow > 0 )
    {   // zatem kontynuujemy wywołania rekurencyjne
        rezultat = sumator( jeszczeKrokow - 1, sumaDotychczas );
    }
    else
    {
        // zatem zatrzymujemy
        printf( "........to ostatni krok, wracamy......\n" );
        rezultat = sumaDotychczas;
    }
    schodki( toPietroNr, '<' );
    printf( "\n" );
    krokRekurencji--;

    return rezultat;
}

//*****************************************************
void dwojkowo( int liczba )
{
    int reszta = liczba % 2;
    if( liczba > 1 ) 	        // warunek zatrzymujący
    {
        dwojkowo( liczba / 2 ); 	// wywołanie rekurencyjne
    }
    printf( "%d", reszta );

    return;
}

//*****************************************************
void schodki( int ile, char znak )
{
    printf( "%d pietro: ", ile );
    for( int m = 0 ; m < ile ; m++ )
    {
        printf( "%c ", znak );
    }
    printf( " " );
}
Leave a Comment