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