Marco Dorantes' WebLog

"Computer science is no more about computers than astronomy is about telescopes" -Edsger W. Dijkstra

Recursive functions

Recursive functions

  • Comments 0

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

Leave a Comment
  • Please add 6 and 8 and type the answer here:
  • Post