Forumul Scientia

IT şi electronică => Programare => Subiect creat de: automat din Mai 17, 2012, 11:48:19 PM

Titlu: recursivitate
Scris de: automat din Mai 17, 2012, 11:48:19 PM
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));
}
Titlu: Răspuns: recursivitate
Scris de: HarapAlb din Mai 18, 2012, 12:38:08 AM
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.
Titlu: Răspuns: recursivitate
Scris de: Quantum din Mai 18, 2012, 12:39:31 AM
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:

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