Darmowe Forum
Grudzieñ 30, 2024, 18:11:55 *
Witamy, Go¶æ. Zaloguj siê lub zarejestruj.
Czy dotar³ do Ciebie email aktywacyjny?

Zaloguj siê podaj±c nazwê u¿ytkownika, has³o i d³ugo¶æ sesji
Aktualno¶ci: Forum zosta³o uruchomione!
 
   Strona g³ówna   Pomoc Zaloguj siê Rejestracja  
Strony: [1]
  Drukuj  
Autor W±tek: Funkcja rekurencyjna  (Przeczytany 2942 razy)
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« : Grudzieñ 12, 2012, 10:57:46 »

Funkcjê rekurencyjn± nazywamy tak± funkcjê która wywo³uje sam± siebie.

Uwaga: Funkcja taka musi posiadaæ warunek zakoñczenia rekurencji. Je¿eli takiego warunku by nie posiada³a funkcja wywo³ywa³a by siebie bez koñca.

Zalety czyli dlaczego mo¿na jej u¿yæ: Funkcja taka jest wykonywana trochê wolniej ni¿ funkcja nierekurencyjna, ale kod jest zdecydowanie krótszy.

Zadanie 1. Napisaæ program który korzystaj±c z funkcji silnia wy¶wietli warto¶æ silni wprowadzanej z klawiatury liczby

#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;

int x;
long int silnia( long int x)
{
   if(x<=1)
      {return 1;}
   else
   {return x*silnia(x-1);}
}
int main(int argc, char *argv[])
{long int y;
cout<<endl<<"Podaj liczbê (1-30):"; cin>>y;
cout<<endl<<"Silnia z liczby "<<y<<" = "<<silnia(y)<<endl;
system ("pause");
}
« Ostatnia zmiana: Styczeñ 02, 2013, 11:54:47 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #1 : Grudzieñ 12, 2012, 12:34:03 »

Zadanie, wykorzystuj±ce rekurencjê do obliczenia sumy liczb od 1 do wprowadzonej warto¶ci.

#include <cstdlib>
#include <iostream>

using namespace std;
void imie1(void);
int x;
long int suma( long int x)
{
   if(x<=1)
      {return 1;}
   else
   {return (x+suma(x-1));}
}
int main(int argc, char *argv[])
{long int y;
cout<<endl<<"Podaj liczbê do ktorej liczyc sume:"; cin>>y;
cout<<endl<<"Suma z liczb od 1 do "<<y<<" = "<<suma(y)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #2 : Grudzieñ 19, 2012, 09:16:21 »

Przyk³ad 3 Przedstawiaj±cy porównanie algorytmu rekurencyjnego  z iteracyjnym, przy obliczaniu silni z podanej liczby.

#include <cstdlib>
#include <iostream>

using namespace std;
int y;
long int silnia(long int x) //to jest funkcja rekurencyjna//
{if(x<=1){return 1;}else
{return x*silnia(x-1);} }

long int silnia1(long int x) //to jest funkcja z algorytmem iteracyjnym//
{int a,s=1;
for(a=1;a<=x;a++){s=s*a;}
return s;}

int main(int argc, char *argv[])
{cout<<"Podaj liczbe: "; cin>>y;
cout<<endl<<"Silnia liczby "<<y<<" = "<<silnia(y)<<endl;
cout<<endl<<"Silnia liczby "<<y<<" = "<<silnia1(y)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}



« Ostatnia zmiana: Grudzieñ 19, 2012, 09:22:19 wys³ane przez admin » Zapisane
admin
Administrator
Ekspert
*****
Wiadomo¶ci: 821


Email
« Odpowiedz #3 : Grudzieñ 19, 2012, 09:45:20 »

Zadanie 4. Wersja zadania poprzedniego powiêkszona o dodawanie.

#include <cstdlib>
#include <iostream>

using namespace std;
int y;
long int silnia(long int x)
{if(x<=1){return 1;}else
{return x*silnia(x-1);} }

long int silnia1(long int x)
{int a,s=1;
for(a=1;a<=x;a++){s=s*a;}
return s;}

long int sumarek(long int x){if(x<=1){return 1;} else
{return x+sumarek(x-1);}}

long int sumait(long int x){
int suma=0;
for(int a=1;a<=x;a++){suma=a+suma;}
return suma;}

int main(int argc, char *argv[])
{cout<<"Podaj liczbe: "; cin>>y;
cout<<endl<<"Silnia liczby "<<y<<" = "<<silnia(y)<<endl;
cout<<endl<<"Silnia liczby "<<y<<" = "<<silnia1(y)<<endl;
cout<<endl<<"Suma liczb od 1 do "<<y<<" = "<<sumarek(y)<<endl;
cout<<endl<<"Suma liczb od 1 do "<<y<<" = "<<sumait(y)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
Zapisane
Strony: [1]
  Drukuj  
 
Skocz do:  

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC | Sitemap

Polityka cookies
Darmowe Fora | Darmowe Forum

blackmoon mylittlepony articz shaggydogss moikrewni