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