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

Comments (0)