Darmowe Forum
Maj 02, 2024, 08:31:50 *
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 2753 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

croissanta zupronum companions cybersteam santera