Untitled

 avatar
unknown
c_cpp
9 months ago
2.3 kB
1
Indexable
#include <iostream>

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

//*****************************************************
int main()
{
    std::cout << "Sumowanie liczb naturalnych od 0 do n. Podaj wartosc n: ";
    int n = 0;
    std::cin >> n;
    std::cout << "\nSuma liczb naturalnych od 0 do " << n << " to = \n" << sumator(n, 0 ) << "\n";

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

    std::cout << "\n" << liczba << " to dwojkowo ";
    dwojkowo(liczba);
    std::cout << "\n";

    liczba = 30942;
    std::cout << "\n" << liczba << " to dwojkowo ";
    dwojkowo(liczba);
    std::cout << "\n";

    return 0;
}

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

    int toPietroNr = krokRekurencji;
    krokRekurencji++;
    schodki(toPietroNr, '>');
    std::cout << sumaDotychczas << " + " << toPietroNr << " = " << sumaDotychczas + toPietroNr << "\n";

    // 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
        std::cout << "........to ostatni krok, wracamy......\n";
        rezultat = sumaDotychczas;
    }
    schodki(toPietroNr, '<');
    std::cout << "\n";
    krokRekurencji--;

    return rezultat;
}

//*****************************************************
void dwojkowo( int liczba )
{
    int reszta = liczba % 2;
    if (liczba > 1) 	        // warunek zatrzymujący
    {
        dwojkowo(liczba / 2); 	// wywołanie rekurencyjne
    }
    std::cout << reszta;
}

//*****************************************************
void schodki( int ile, char znak )
{
    std::cout << ile << " pietro: ";
    for (int m = 0; m < ile; m++)
    {
        std::cout << znak << " ";
    }
    std::cout << " ";
}
Editor is loading...
Leave a Comment