Untitled
unknown
c_cpp
2 years ago
2.3 kB
8
Indexable
#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( " " );
}
Editor is loading...
Leave a Comment