Una sucesión es suave si valor absoluto de la diferencia de sus términos consecutivos es 1.
Definir la función
suaves :: Int -> [[Int]] |
tal que (suaves n) es la lista de las sucesiones suaves de longitud n cuyo último término es 0. Por ejemplo,
suaves 2 == [[1,0],[-1,0]] suaves 3 == [[2,1,0],[0,1,0],[0,-1,0],[-2,-1,0]] |
Soluciones
suaves :: Int -> [[Int]] suaves 0 = [] suaves 1 = [[0]] suaves n = concat [[x+1:x:xs,x-1:x:xs] | (x:xs) <- suaves (n-1)] |
Otra forma de expresarlo:
Puede calcularse directamente el término (la sucesión) concreta que se desee:
Aunque internamente (operaciones con bits) se itera, se puede calcular el término de cada serie:
(para según que tipo de dato,
suavek
podría tener coste O(1))