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; } |