{"id":4055,"date":"2018-05-11T06:00:55","date_gmt":"2018-05-11T04:00:55","guid":{"rendered":"http:\/\/www.glc.us.es\/~jalonso\/exercitium\/?p=4055"},"modified":"2022-03-26T11:30:33","modified_gmt":"2022-03-26T09:30:33","slug":"sucesion-de-recaman","status":"publish","type":"post","link":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/sucesion-de-recaman\/","title":{"rendered":"Sucesi\u00f3n de Recam\u00e1n"},"content":{"rendered":"<p>La sucesi\u00f3n de Recam\u00e1n est\u00e1 definida como sigue:<\/p>\n<pre lang=\"text\">\n   a(0) = 0\n   a(n) = a(n-1) - n, si a(n-1) > n y no figura ya en la sucesi\u00f3n\n   a(n) = a(n-1) + n, en caso contrario.\n<\/pre>\n<p>Definir las funciones<\/p>\n<pre lang=\"text\">\n   sucRecaman :: [Int]\n   invRecaman :: Int -> Int\n   graficaSucRecaman :: Int -> IO ()\n   graficaInvRecaman :: Int -> IO ()\n<\/pre>\n<p>tales que<\/p>\n<ul>\n<li>sucRecaman es la lista de los t\u00e9rminos de la sucesi\u00f3n de Recam\u00e1m. Por ejemplo, <\/li>\n<\/ul>\n<pre lang=\"text\">\n      \u03bb> take 25 sucRecaman3\n      [0,1,3,6,2,7,13,20,12,21,11,22,10,23,9,24,8,25,43,62,42,63,41,18,42]\n      \u03bb> sucRecaman !! 1000\n      3686\n      \u03bb> sucRecaman !! 1000001\n      1057163\n<\/pre>\n<ul>\n<li>(invRecaman n) es la primera posici\u00f3n de n en la sucesi\u00f3n de Recam\u00e1n. Por ejemplo,  <\/li>\n<\/ul>\n<pre lang=\"text\">\n      invRecaman 10       ==  12\n      invRecaman 3686     ==  1000\n      invRecaman 1057163  ==  1000001\n\n<\/pre>\n<ul>\n<li>(graficaSucRecaman n) dibuja los n primeros t\u00e9rminos de la sucesi\u00f3n de Recam\u00e1n. Por ejemplo, (graficaSucRecaman 300) dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_1.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_1.png?resize=640%2C480\" alt=\"Sucesion_de_Recaman_1\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-3254\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_1.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_1.png?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_1.png?resize=100%2C75&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_1.png?resize=150%2C112&amp;ssl=1 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/li>\n<li>(graficaInvRecaman n) dibuja los valores de (invRecaman k) para k entre 0 y n. Por ejemplo, (graficaInvRecaman 17) dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_2.png?resize=640%2C480\" alt=\"Sucesion_de_Recaman_2\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-3255\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_2.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_2.png?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_2.png?resize=100%2C75&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_2.png?resize=150%2C112&amp;ssl=1 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><br \/>\ny (graficaInvRecaman 100) dibuja<br \/>\n<a href=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_3.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_3.png?resize=640%2C480\" alt=\"Sucesion_de_Recaman_3\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-3256\" srcset=\"https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_3.png?w=640&amp;ssl=1 640w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_3.png?resize=300%2C225&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_3.png?resize=100%2C75&amp;ssl=1 100w, https:\/\/i0.wp.com\/www.glc.us.es\/~jalonso\/exercitium\/wp-content\/uploads\/2017\/04\/Sucesion_de_Recaman_3.png?resize=150%2C112&amp;ssl=1 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" data-recalc-dims=\"1\" \/><\/a><\/li>\n<\/ul>\n<h4>Soluciones<\/h4>\n<pre lang=\"haskell\">\nimport qualified Data.Set as S\n\n-- 1\u00aa soluci\u00f3n\n-- ===========\n\nsucRecaman1 :: [Int]\nsucRecaman1 = map suc1 [0..]\n\nsuc1 :: Int -> Int\nsuc1 0 = 0\nsuc1 n | y > n && y - n `notElem` ys = y - n\n       | otherwise                   = y + n\n  where y  = suc1 (n - 1)\n        ys = [suc1 k | k <- [0..n - 1]]\n\n-- 2\u00aa soluci\u00f3n\n-- ===========\n\nsucRecaman2 :: [Int]\nsucRecaman2 = 0:zipWith3 f sucRecaman2 [1..] (repeat sucRecaman2)\n  where f y n ys | y > n && y - n `notElem` take n ys = y - n\n                 | otherwise                          = y + n\n\n-- 3\u00aa soluci\u00f3n\n-- ===========\n\nsucRecaman3 :: [Int]\nsucRecaman3 = 0 : recaman (S.singleton 0) 1 0\n\nrecaman :: S.Set Int -> Int -> Int -> [Int]\nrecaman s n x\n  | x > n && (x-n) `S.notMember` s =\n    (x-n) : recaman (S.insert (x-n) s) (n+1) (x-n)\n  | otherwise =\n    (x+n):recaman (S.insert (x+n) s) (n+1) (x+n) \n\n-- Comparaci\u00f3n de eficiencia:\n--    \u03bb> sucRecaman1 !! 25\n--    17\n--    (3.76 secs, 2,394,593,952 bytes)\n--    \u03bb> sucRecaman2 !! 25\n--    17\n--    (0.00 secs, 0 bytes)\n--    \u03bb> sucRecaman3 !! 25\n--    17\n--    (0.00 secs, 0 bytes)\n--\n--    \u03bb> sucRecaman2 !! (2*10^4)\n--    14358\n--    (2.69 secs, 6,927,559,784 bytes)\n--    \u03bb> sucRecaman3 !! (2*10^4)\n--    14358\n--    (0.04 secs, 0 bytes)\n\n-- Definici\u00f3n de invRecaman\ninvRecaman :: Int -> Int\ninvRecaman n =\n  length (takeWhile (\/=n) sucRecaman3)\n\ngraficaSucRecaman :: Int -> IO ()\ngraficaSucRecaman n =\n  plotList [Key Nothing]\n           (take n sucRecaman3)\n\ngraficaInvRecaman :: Int -> IO ()\ngraficaInvRecaman n =\n  plotList [Key Nothing]\n           [invRecaman k | k <- [0..n]]\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>La sucesi\u00f3n de Recam\u00e1n est\u00e1 definida como sigue: a(0) = 0 a(n) = a(n-1) &#8211; n, si a(n-1) > n y no figura ya en la sucesi\u00f3n a(n) = a(n-1) + n, en caso contrario. Definir las funciones sucRecaman :: [Int] invRecaman :: Int -> Int graficaSucRecaman :: Int -> IO () graficaInvRecaman :: Int&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"footnotes":"","_jetpack_memberships_contains_paid_content":false},"categories":[7],"tags":[8,376,351,28,10,27,393,11,309,6,49,350,47,34,62],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4055"}],"collection":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/comments?post=4055"}],"version-history":[{"count":2,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4055\/revisions"}],"predecessor-version":[{"id":4088,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/posts\/4055\/revisions\/4088"}],"wp:attachment":[{"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/media?parent=4055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/categories?post=4055"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.glc.us.es\/~jalonso\/exercitium\/wp-json\/wp\/v2\/tags?post=4055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}