{"id":3709,"date":"2015-05-05T13:55:33","date_gmt":"2015-05-05T11:55:33","guid":{"rendered":"http:\/\/www.valcon.it\/pp\/?p=3709"},"modified":"2025-11-21T15:51:23","modified_gmt":"2025-11-21T14:51:23","slug":"ricorsione","status":"publish","type":"post","link":"https:\/\/www.valcon.it\/pp\/ricorsione\/","title":{"rendered":"Ricorsione"},"content":{"rendered":"\n<p>Se il linguaggio di programmazione prevede la ricorsione&#8230; una <tt>SUB A<\/tt> pu\u00f2 chiamare la <tt>SUB A<\/tt>, se stessa, per svolgere lo stesso compito ma con un&#8217;stanza diversa<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"http:\/\/www.valcon.it\/pp\/wp-content\/uploads\/ricorsione.png\" alt=\"ricorsione\"\/><\/figure>\n<\/div>\n\n\n<p><\/p>\n\n\n\n<p>La <tt>SUB A<\/tt> chiama la <tt>SUB A<\/tt>, &#8230; ma a ogni passo il problema diventa pi\u00f9 semplice (i valori dei parametri si riducono) finch\u00e9 l&#8217;istanza diventa un <em>caso particolare<\/em> che non necessita di un&#8217;ulteriore chiamata <em>ricorsiva<\/em> e si ritorna all&#8217;indietro fino alla chiusura di tutte le chiamate.<\/p>\n\n\n\n<p>Perch\u00e9 la ricorsione funzioni ci sono 2 regole da rispettare<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u00e8 previsto un <strong>caso particolare<\/strong> (una dimensione minima del problema) che non richiede ulteriori chiamate<\/li>\n\n\n\n<li>la <strong>dimensione<\/strong> del problema <strong>diminuisce<\/strong> a ogni chiamata.<\/li>\n<\/ul>\n\n\n\n<p>La ricorsione pu\u00f2 essere <em>complicata<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In passato le risorse hardware (RAM) ridotte ponevano un limite al numero massimo di chiamate.<\/li>\n\n\n\n<li><strong>Multipla<\/strong>: nel codice del sottoprogramma la chiamata ricorsiva si presenta pi\u00f9 volte (2, &#8230;)<\/li>\n\n\n\n<li><strong>Indiretta<\/strong>: il sottoprogramma A chiama un altro sottoprogramma B che a sua volta &#8230; che a sua volta chiama A<\/li>\n<\/ul>\n\n\n\n<p>La ricorsione pu\u00f2 essere <em>facile<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la ricorsione pu\u00f2 sostituire l&#8217;iterazione (LISP, &#8230;) e viceversa<\/li>\n\n\n\n<li>alcuni problemi ammettano formulazioni ricorsive <em>immediate<\/em> quindi&#8230;<\/li>\n\n\n\n<li>alcuni problemi ammettono formulazioni ricorsive immediate mentre la riformulazione iterativa risulta piuttosto <em>difficile<\/em><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">C, C++, Java, &#8230;<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\nvoid XYZ(parametri_formali)\n{\n  \u00a0 ...\n    XYZ(parametri_attuali);\n    ...\n}\n<\/pre><\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\ndouble XYZ(parametri_formali)\n{\n  \u00a0 ...\n  \u00a0 x=XYZ(parametri_attuali);\n  \u00a0 ...\n  \u00a0 return espr;\n}\n<\/pre><\/div><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pascal<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: delphi; title: ; notranslate\" title=\"\">\nProcedure XYZ(parametri_formali);\n...\nBegin\n \u00a0 \u00a0...\n \u00a0 \u00a0XYZ(parametri_attuali);\n \u00a0 \u00a0... \nEnd; \n<\/pre><\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: delphi; title: ; notranslate\" title=\"\">\nFunction XYZ(parametri_formali): Double;\n...\nBegin\n  \u00a0 ...\n  \u00a0 x=XYZ(parametri_attuali);\n  \u00a0 ...\n  \u00a0 XYZ:=espr;\nEnd;\n<\/pre><\/div><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Python<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndef XYZ(parametri_formali):\n  \u00a0 ...\n    XYZ(parametri_attuali)\n    ...\n<\/pre><\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndef XYZ(parametri_formali):\n  \u00a0 ...\n  \u00a0 x=XYZ(parametri_attuali)\n  \u00a0 ...\n  \u00a0 return espr\n<\/pre><\/div><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Visual Basic<\/h2>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: vb; title: ; notranslate\" title=\"\">\nSub XYZ(parametri_formali)\n  \u00a0 ...\n  \u00a0 Call XYZ(parametri_attuali)\n    ...\nEnd Sub\n<\/pre><\/div><\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\"><div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: vb; title: ; notranslate\" title=\"\">\nFunction XYZ(parametri_formali) As Double\n  \u00a0 ...\n  \u00a0 x=XYZ(parametri_attuali)\n  \u00a0 ...\n  \u00a0 XYZ=espr\nEnd Function\n<\/pre><\/div><\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Se il linguaggio di programmazione prevede la ricorsione&#8230; una SUB A pu\u00f2 chiamare la SUB A, se stessa, per svolgere lo stesso compito ma con un&#8217;stanza diversa La SUB A chiama la SUB A, &#8230; ma a ogni passo il problema diventa pi\u00f9 semplice (i valori dei parametri si riducono) finch\u00e9 l&#8217;istanza diventa un caso &#8230; <a title=\"Ricorsione\" class=\"read-more\" href=\"https:\/\/www.valcon.it\/pp\/ricorsione\/\" aria-label=\"Per saperne di pi\u00f9 su Ricorsione\">Leggi tutto<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-3709","post","type-post","status-publish","format-standard","hentry","category-prog"],"_links":{"self":[{"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/posts\/3709","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/comments?post=3709"}],"version-history":[{"count":35,"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/posts\/3709\/revisions"}],"predecessor-version":[{"id":60926,"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/posts\/3709\/revisions\/60926"}],"wp:attachment":[{"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/media?parent=3709"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/categories?post=3709"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.valcon.it\/pp\/wp-json\/wp\/v2\/tags?post=3709"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}