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