IT şi electronică > Programare
recursivitate
(1/1)
automat:
Scrieti o functie sau o procedura recursiva care implementeaza urmatorul algoritm recursiv :
f(0) = 1;
f(n) = A[n] * f(n-1);
Cum am facut : n=3 A = [2, 7, 5]
f(3) = A[3] * f(2)
f(2) = A[2] * f(1)
f(1) = A[1] * f(0)
Aici nu am inteles un lucru : indexarea tablourilor incepe de la elementul 0, deci A[0] =2, A[1]=7, A[2]=5;
Calculul pe care l-am facut mai sus incepe indexarea tabloului de la A[3] si decrementand, ajunge la elementul A[1];
#include<stdio.h>
int recursiv(int n)
{
int A[n], i;
if(n==0) return 1;
return A[n]*recursiv(n-1);
}
int main()
{
int n, i, A[64];
printf("\n Dati n = ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("\n A[%d] = ", i+1);
scanf("%d", &A);
}
printf("\n %d\n", recursiv(n));
}
HarapAlb:
Vectorul A trebuie sa-l declari static sau sa-l introduci ca argument al functiei recursiv() pe langa n. Asa cum l-ai scris tu, vectorul A este o variabila locala in corpul functiei recursiv si se va crea o data cu apelarea functiei, implicit neavand valori definite.
Quantum:
Ai cateva probleme cum ar fi: scopul sirului A[n] din functia recursiva este limitat la functia respectiva din moment ce il declari in interiorul functiei (respectiv cel din main() este limitat acolo), din moment ce 'n' este numarul de elemente trebuie sa incepi functia recursiva cu indexul sirului [n-1], si la citire ai nevoie de &A[index] in loc de &A
Am corectat codul:
--- Cod: ---#include<stdio.h>
int A[64];
int recursiv(int n)
{
if(n==0) return 1;
return A[n-1]*recursiv(n-1);
}
int main()
{
int n, i;
printf("\n Dati n = ");
scanf("%d", &n);
for(i=0; i<n; i++)
{
printf("\n A[%d] = ", i+1);
scanf("%d", &A[i]);
}
printf("\n %d\n", recursiv(n));
}
--- Terminare cod ---
Navigare
Du-te la versiunea completă