Ştiri:

Vă rugăm să citiţi Regulamentul de utilizare a forumului Scientia în secţiunea intitulată "Regulamentul de utilizare a forumului. CITEŞTE-L!".

Main Menu

recursivitate

Creat de automat, Mai 17, 2012, 11:48:19 PM

« precedentul - următorul »

0 Membri şi 1 Vizitator vizualizează acest subiect.

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:

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