Documente Academic
Documente Profesional
Documente Cultură
Cursul 8: Recursivitate
Ion Giosan
Universitatea Tehnică din Cluj-Napoca
Departamentul Calculatoare
Recursivitatea
1 , dacă n = 0
fact (n) =
n × fact (n − 1) , dacă n > 0
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
printf("n=");
scanf("%d", &n);
printf("%d!=%g\n", n, factorial(n));
/* &1=adresa de intoarcere dupa evaluarea lui factorial(n) */
return 0;
}
27 septembrie 2020 Programarea Calculatoarelor - I. Giosan 7
Exemplu – Calculul lui n!
int main()
{
int n=5;
int a[]={3,6,4,1,2};
inverseaza(a,0,n-1);
for (int i=0; i<n; i++)
printf("%d ",a[i]); // 2 1 4 6 3
return 0;
}
27 septembrie 2020 Programarea Calculatoarelor - I. Giosan 10
Exemplu – Valoarea minimă
dintr-un șir de întregi
#include <stdio.h>
#include <stdlib.h>
int main() {
int n=5;
int a[]={3,6,4,1,2};
printf("%d",minim(a,0,n-1)); // 1
return 0;
}
int este_impar(int);
int este_par(int n) {
if (n==0)
return 1;
return(este_impar(n-1));
}
int este_impar(int n) {
return (!este_par(n));
}
int main() {
printf("%d %d", este_par(20), este_par(35)); //1 0
return 0;
}
0, dacă n = 0
fib(n) =
= 1, dacă n 1
fib(n − 1) + fib(n − 2), dacă n ≥ 2
• Partițiile unui număr natural pozitiv
• Exemplu pentru numărul 4:
{1, 1, 1, 1}, {1, 1, 2}, {1, 2, 1},{1, 3}, {2, 1, 1}, {2, 2}, {3, 1}, {4}
#include <stdio.h>
#include <stdlib.h>
int fib(int n)
{
if (n==0)
return 0;
if (n==1)
return 1;
return fib(n-1)+fib(n-2);
}
int main()
{
printf("%d\n",fib(20)); //6765
printf("%d\n",fib(42)); //Timp de executie ridicat!!!
return 0;
}
#include <stdio.h>
#include <stdlib.h>
void f(int n) {
double x[10000]; // Tablou alocat pe stiva la fiecare apel
if (n==0)
return;
else
{
f(n-1);
printf("%d ",n);
}
}
int main() {
f(10); // 1 2 3 4 5 6 7 8 9 10
f(100); // Depasire de stiva !!!
return 0;
}