You are on page 1of 6

EJERCICIOS DE RECURSIVIDAD EN LISP

 Hallar la profundidad máxima de un árbol, usando recursiva.

(defun profundidad_maxima(expresion)

(cond ((null expresion)0)

((atom expresion)1)

(t(+ 1 (apply #'max(mapcar #'profundidad_maxima expresion))))

))

Ejemplo: (profundidad_maxima '(1 2 (3 4 (5 6)) (7 8))) => 4

 Hallar el combinatorio de (x, y) de forma recursiva.

(defun combinatorio(x y)

(if(OR (= x y) (= y 1)) (if(= x y)1 x)

(+ (combinatorio (- x 1) (- y 1)) (combinatorio (- x 1) y))

))

Ejemplo: (combinatorio 4 3) => 4

 Transformar un número decimal a un número binario.

(defun decimal-binario (n)

(if (= (/ n 2) 0) 'fin

(progn (setf b (mod n 2)) (format t "~a~%" b) ))

(if(= (mod n 2) 0) (decimal-binario(/ n 2))

(decimal-binario(/ (- n 1) 2)))

Ejemplo: (decimal-binario 5)=> 1 0 1 FIN

 Escribir una función que tome una lista y un número natural “n” y retorne la lista
original sin los últimos “n” elementos.

Método tamano:

(defun tamano(lista)

(if(endp lista)

0
(if(atom(car lista))

(+ 1 (tamano(cdr lista)))

(+ (tamano(car lista)) (tamano(cdr lista)))

)))

Método cortarlista:

(defun cortarlista (L n)

(cond ((<= (tamano L) n) nil)

(t (cons (car L) (cortarlista (cdr L) n)))

))

Ejemplo: (cortarLista ‘(1 2 3 4 5 6) 2) => (1 2 3 4)

 Mostrar todos los múltiplos de 3 de una lista.

(defun multiplos3 (L)

(if(null L) 'fin

(if(= (mod (car L) 3) 0) (progn (setq b (car L)) (format t "~a~%"b )(multiplos3 (cdr L)))

(multiplos3 (cdr L))

)))

Ejemplo: (multiplos3 ‘(1 2 3 4 5 6)) => 3 6 FIN

LISP – Funciones Recursivas


1)
Factorial (n!)
(defun factorial (n)
(if (= n 0) 1
(* n (factorial (- n 1)))
)
)
2) Potencia (nm)
(defun potencia (x m)
(if (= m 0) 1
(* x (potencia x (- m 1)))
)
)
3) Longitud de una Lista
(defun longlist (lista)
(cond ((null lista) 0)
(T (+ 1 (longlist (CDR lista))))
)
)
4) Suma de los N primeros números enteros
(defun sumatoria (n)
(if (= n 0) 0(+ n (sumatoria (- n 1)))
)
)
5) Producto de los N primeros números enteros
(defun producto (n)
(if (= n 1) 1
(* n (producto (- n 1)))
)
)
6) Aplana una lista
(defun aplana (lista)
(cond((null lista) NIL)
((atom (CAR lista))
(cons
(CAR lista)
(aplana (CDR lista))))
(t (append
(aplana (CAR lista))
(aplana (CDR lista))))))
7) Producto Escalar de dos listas

(defun prodescalar (lista1 lista2)


(if (or (null lista1) (null lista2)) 0
(+ (* (CAR lista1) (CAR lista2))
(prodescalar (CDR lista1) (CDR lista2))
)
)
)
8) Sumar los elementos de una lista (no anidada)
(defun sumalista (lista)
(cond ((null lista) 0)
(T (+ (CAR lista) (sumalista (CDR lista)))
)
)
)
9) Verificar si un elemento pertenece a una lista
(defun pertenece (x lista)
(if (endp lista)
nil
(if (= x (car lista))
Lista
(pertenece x (cdr lista))
))
)
10) Elimina elemento de una lista
(defun eliminar (x lista)
(cond ((endp lista) lista)
((equal x (CAR lista)) (CDR lista))
(T (cons (CAR lista) (eliminar x (CDR lista))))))

Pagina de recursividad
https://es.slideshare.net/Ceci23/t3-ejercicios-de-recursividadgrupo6
http://www.togores.net/vl/curso/lisp/bases/funciones-recursivas-e-
iterativas/funciones-recursivas
FUNCIONES RECURSIVAS EN LISP

1.-Función recursiva para hallar el cociente mediante restas sucesivas


(defun divirest (num1 num2)
(if ( > num2 num1)
0
(+ (divirest (- num1 num2) num2) 1)) )Ejemplo: (divirest 5 3 )
1

2.-Funcion recursiva para multiplicar elementos Negativos


(defun multi (n) (if (< n 0) (* n (multi (+ n 1)) ) 1 ) )
Ejemplo: multi -4
24

3.-Funcion Recursivapara el producto escalar


(defun prodesc (vect1 vect2)
(if (or (null vect1) (null vect2))
0
(+ (* (car vect1) (car vect2))
(prodesc (cdr vect1) (cdr vect2)))))
Ejemplo: (prodesc '(2 3) '(4 5))
234.-Función que hace que una lista no tenga sublistas
(defun nosub (lista)
(cond
((null lista) NIL)
((atom (car lista))
(cons
(car lista)
(nosub (cdr lista))))
(t (append
(nosub (carlista))
(nosub (cdr lista))))))
Ejmplo: (nosub ‘(a (b c) ((d e) f)))
(A B C D E F)

5.-Funcion Recursiva que intentifica si algo es miembro de una lista


(defun miembro (obj lst)
(if (null lst)nil
(if (eql (car lst) obj)
lst
(miembro obj (cdr lst)))))
Ejemplo: miembro '2 '(1 2 3)
(2 3)

6.- Función Recursiva para la serie de Fibonacci


(defun fibo (n) (if (eq n 1) (+ 0 1) (if (> n 1)(+ (fibo (- n 1)) (fibo (- n 2)) ) 1 ) ) )

Ejemplo: fibo 4
5
7.- Función recursiva para ver si existe algún impar
( defun impar(num)
(cond((null num)nil)
((oddp(car num))t)
(t(impar ( cdrnum)))))
Ejemplo: ( impar '(2 3))
T
8.- Función recursiva para invertir un número
(defun invertir (num)
( if ( < num 10 ) num
( + ( / num 10) ( * ( invertir ( / num 10 )) 10))))
Ejemplo:invertir 12
21
9.- Función Recursiva para sumar los dígitos de un número
(defun sumadig (num)
(if ( eq num 0) num
(+ ( (sumadig ( / num 10))) (/ num 10))))
Ejemplo: (sumadig 12)
3
10.- Funciónrecursiva para contar los elementos de una lista
(defun cont (lista) (if (endp lista) 0 (+ 1 (cont (cdr lista))) ) )

Ejemplo: (cont '(a b c d))


4

1.- Funcion recursiva que cuenta cuantos...

You might also like