Partager via


Recursive functions

My young nephew came with a question about recursive functions, after a few minutes, he fully understood these samples:

 #include <stdio.h>

/*

0!             = 1
1!             = 1
3! = 3*2*1     = 6
5! = 5*4*3*2*1 = 120

3! = 3*2! = 3*(2*1!) = 3*[2*(1)] = 3*(2*1) = 3*2*1 = 6

n! = n*(n-1)!

*/

int factorial_recursivo(int n)
{
 if(n <= 1)
       return 1;
   return n * factorial_recursivo(n-1);
}

int factorial_iterativo(int n)
{
 int resultado=1;
 int iteraciones = n-1;
 int k;

 if(iteraciones <= 0)
 return 1;

 for(k=n; k>1; --k)
  resultado *= k;
 return resultado;
}

void iterativo()
{
  int n=3;
  int factorial = factorial_iterativo(n);

  printf("El factorial de 0 es %d\n",factorial_iterativo(0));
  printf("El factorial de 1 es %d\n",factorial_iterativo(1));
  printf("El factorial de %d es %d\n",n,factorial);
  printf("El factorial de 5 es %d\n",factorial_iterativo(5));
}

void recursivo()
{
  printf("El factorial de 0 es %d\n",factorial_recursivo(0));
  printf("El factorial de 1 es %d\n",factorial_recursivo(1));
  printf("El factorial de 3 es %d\n",factorial_recursivo(3));
  printf("El factorial de 5 es %d\n",factorial_recursivo(5));
}

void main()
{
    iterativo();
    recursivo();
}

And also this:

 #include <stdio.h>

struct Nodo
{
   int dato;
   Nodo* izquierdo;
    Nodo* derecho;
};

void muestra_arbol(Nodo* padre,int tabs)
{
   if(padre==0) return;
    for(int k=0; k<tabs; ++k)
        printf("\t");
   printf("%d\n",padre->dato);
  muestra_arbol(padre->izquierdo,tabs+1);
  muestra_arbol(padre->derecho,tabs+1);
}

void muestra_arbol_secuencia(Nodo* padre)
{
 if(padre==0) return;
    muestra_arbol_secuencia(padre->izquierdo);
   muestra_arbol_secuencia(padre->derecho);
 printf("%d",padre->dato);
}

Nodo* creaNodo(int n,Nodo* izq,Nodo* der)
{
 Nodo* nodonuevo=new Nodo;
   nodonuevo->dato=n;
   nodonuevo->izquierdo=izq;
    nodonuevo->derecho=der;
  return nodonuevo;
}

void arbol()
{
 Nodo* n1=creaNodo(4,0,0);
   Nodo* n2=creaNodo(5,0,0);
   Nodo* izq=creaNodo(2,n1,n2);
    Nodo* der=creaNodo(3,0,0);
  Nodo* raiz=creaNodo(1,izq,der);
 muestra_arbol(raiz,0);
  printf("\n");
   muestra_arbol_secuencia(raiz);
}

void main()
{
 arbol();
}