Welcome, Guest. Please login or register.

Autor Subiect: recursivitate  (Citit de 3201 ori)

0 Membri şi 1 Vizitator vizualizează acest subiect.

automat

  • Vizitator
recursivitate
« : Mai 17, 2012, 11:48:19 p.m. »
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

  • Vizitator
Răspuns: recursivitate
« Răspuns #1 : Mai 18, 2012, 12:38:08 a.m. »
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.

Offline Quantum

  • Junior
  • **
  • Mesaje postate: 164
  • Popularitate: +6/-3
Răspuns: recursivitate
« Răspuns #2 : Mai 18, 2012, 12:39:31 a.m. »
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));
}