Rekurencja - podstawy

0

Witam,

Lecę dalej z zadaniami na koło :)

Niech funkcja T określona na liczbach naturalnych będzie zadana następującym wzorem:

T(n,0) = n dla n > 0
T(0,m) = m dla m > 0
T(n,m)= T(n-1,m)+T(n,m-1) dla n>0

a. Napisz rekurencyjną funkcję fTrec(int n, int m) obliczającą wartość funkcji T dla
argumentów n i m.

Wiem że zadanie jest pewnie banalne, ale rekurencja jest dla mnie wyzwaniem :) moje rozwiązanie wygląda następująco :

int fTrec (int n, int m){

   if n>0 {
             
             if (m==0) return n;
             
             }
   if m>0{
   
             if (n==0) return m;
             
             }
   if n>0 {
   
             return fTrec(n-1,m)+fTrec(n,m-1);
             
             }   

} 
}

Mam nadzieje że dobrze napisałem funkcje rekurencyjną. Mój problem jest następujący w momencie kiedy inicjuje funkcje ze zmiennymi (2,2) na mój gust wyniki powinien być 4. N będzie równe 2 dla m=0, m również będzie 2 dla n=0. Program zwraca 8 i szczerze to nie mam pojęcia dlaczego.

0

o_O

  1. Co to za język?
  2. f(2,2) = f(1,2) + f(2,1) = f(0,2) + f(1,1) + f(1,1) + f(2,0) = 2 + f(0,1) + f(1,0) + f(0,1) + f(1,0) + 2 = 4 + 1 + 1 + 1 + = 8
    Poza tym łatwiej ta funkcję zapisać tak:
int fTrec(int n, int m)
{
  if (!n ^ !m)
    return n>m ? n : m;
  return fTrec(n-1,m)+fTrec(n,m-1);
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1