Darmowe Forum

C+++ => A Kuba powiedział => Wątek zaczęty przez: admin Grudzień 12, 2012, 10:57:46



Tytuł: Funkcja rekurencyjna
Wiadomość wysłana przez: admin 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");
}


Tytuł: Odp: Funkcja rekurencyjna
Wiadomość wysłana przez: admin 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;
}


Tytuł: Odp: Funkcja rekurencyjna
Wiadomość wysłana przez: admin 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;
}





Tytuł: Odp: Funkcja rekurencyjna
Wiadomość wysłana przez: admin 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;
}


Polityka cookies
Darmowe Fora | Darmowe Forum

hoobit wojownicy-nocy wwwstadodzikich filtrowa36 polskiekoleje