Está en la página 1de 4

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA

Curso: Inteligencia Artificial Profesor: Hugo Vega Huerta Alumno: Ramos Tanca Jose Joel Codigo: 03200105 Tema: 10 Ejemplos de Recursividad en Lisp

2011-I

Ejemplos de recursividad 1_ Obtenga la suma de los n primeros nmeros enteros positivos sumapositivos(x)= 1 x + sumapositivos (x-1) Si x=1 Otro caso

En Lisp: CL-USER 15 : 3 > (defun sumapositivos(x) (if(= x 1) 1 (+ x (sumapositivos(- x 1))))) SUMAPOSITIVOS CL-USER 16 : 3 > sumapositivos 4 10 2_ Obtenga el exponente de u n numero dado la base y el exponente a y b de manera recursiva

power(a,b)=

1 base*power(base,exponente-1)

exponente=0 otro caso

En lisp: CL-USER 10 : 3 > (defun power(base exponente) (if(eq exponente 0) 1 (* base (power base (exponente 1))))) POWER CL-USER 11 : 3 > power 4 5 1024 3_ Obtener el producto de 2 enteros a y b de manera recursiva producto(a,b)= a a+producto(a,b-1) b=1 otro caso

En lisp:
CL-USER 17 : 3 > (defun producto(a b) (if(eq b 1) a (+ a (producto a (- b 1))))) PRODUCTO CL-USER 19 : 3 > producto 80 50 4000

4_ Calcule el ensimo numero fibonacci mediante una funcin recursiva 0 fibo(n)= 1 si n=1 si n=2

fibo(n-1)+fibo(n-2)

En Lisp: CL-USER 17 > (defun fibo(a) (if(eq a 1) 0 (if(eq a 2) 1 (+ (fibo(- a 1)) (fibo(- a 2)))))) FIBO CL-USER 18 > fibo 5 3

5_ Calcule el numero de atomos : En Lisp: CL-USER 26 : 1 > (defun cuentaatomos (expr)(cond ((null expr) 0)((atom expr) 1)(t (+ (cuentaatomos (first expr))(cuenta-atomos (rest expr)))))) CUENTAATOMOS l CL-USER 25 : 1 > cuentaatomos '(a b c) 3 6_ Nmero de sublistas de una lista (nmero de veces que se abre parntesis, menos 1) CL-USER 29 : 1 > (defun sublistas (expresion)(cond ((or (null expresion) (atom expresion))0)(t (+ (if (atom (first expresion)) 0 1)(sublistas (first expresion)) (sublistas (rest expresion)))))) SUBLISTAS CL-USER 30 : 1 > (sublistas (a (b c) ((d e) f))) 3 7_ Producto escalar CL-USER 3 : 4 > (defun producto (vector1 vector2)(if (or (null vector1) (null vector2))0(+ (* (first vector1) (first vector2))(producto (rest vector1) (rest vector2))))) PRODUCTO CL-USER 3 : 1 > (producto '(2 3) '(4 5)) CL-USER 3 > 3 8_ Calculo de la potencia de un numero optimizado CL-USER 3 : 1 > (defun potencia (x n);; Optimizacion calculo potencia"(cond ((= n 0) 1)

((evenp n) (expt (potencia x (/ n 2)) 2)) En Lisp: (t (* x (potencia x (- n 1)))))) POTENCIA CL-USER 4 : 1 > (potencia 2 3) CL-USER 3 > 8 9_ Objetivo: sin utilizar remove-if, conseguir la misma funcionalidad del operador: CL-USER 7 : 1 > (defun quitar-si (predicado lista)(cond((null lista) nil)((funcall predicado (car lista))(quitar-si predicado (cdr lista)))(t (cons (car lista) (quitar-si predicado (cdr lista)))))) QUITAR-SI CL-USER 8 : 1 > (quitar-si evenp '(1 2 3 4)) (1 3) 10_ Calcule el factorial de un numero En lisp: CL-USER 1 > (defun facto(x) (if(eq x 0) 1 (* x (facto(- x 1))))) FACTO CL-USER 3 > facto 3 6

También podría gustarte