{"id":228,"date":"2017-08-21T00:04:52","date_gmt":"2017-08-20T22:04:52","guid":{"rendered":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/?p=228"},"modified":"2022-10-23T10:32:57","modified_gmt":"2022-10-23T08:32:57","slug":"silnia-przyklad-mechanizmu-rekurencji","status":"publish","type":"post","link":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/2017\/08\/21\/silnia-przyklad-mechanizmu-rekurencji\/","title":{"rendered":"5. Silnia &#8211; przyk\u0142ad mechanizmu rekurencji"},"content":{"rendered":"<div id=\"pl-228\" class=\"panel-layout\">\n<div id=\"pg-228-0\" class=\"panel-grid panel-no-style\" data-style=\"{&quot;background_display&quot;:&quot;tile&quot;,&quot;cell_alignment&quot;:&quot;flex-start&quot;}\">\n<div id=\"pgc-228-0-0\" class=\"panel-grid-cell\" data-weight=\"0.51503006012024\">\n<div id=\"panel-228-0-0-0\" class=\"so-panel widget widget_sow-editor panel-first-child panel-last-child\" data-index=\"0\" data-style=\"{&quot;background_image_attachment&quot;:false,&quot;background_display&quot;:&quot;tile&quot;}\">\n<div class=\"so-widget-sow-editor so-widget-sow-editor-base\">\n<div class=\"siteorigin-widget-tinymce textwidget\">\n<style type=\"text\/css\">\n\t<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --><br \/>\n\t<\/style>\n<p align=\"JUSTIFY\">Silnia z liczby naturalnej <i>n<\/i> to iloczyn wszystkich liczb od 1 do <i>n<\/i>, czyli n!=1*2*3*&#8230;*(n-1)*n.<\/p>\n<p align=\"JUSTIFY\">Maj\u0105c do dyspozycji matematyczny wz\u00f3r silni napiszemy program w prologu obliczaj\u0105cy silnie dla dowolnej liczby.<\/p>\n<p align=\"JUSTIFY\"><img loading=\"lazy\" class=\"aligncenter size-full wp-image-233\" src=\"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/wp-content\/uploads\/2017\/08\/s0.png\" alt=\"\" width=\"187\" height=\"49\" srcset=\"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/wp-content\/uploads\/2017\/08\/s0.png 187w, https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/wp-content\/uploads\/2017\/08\/s0-150x39.png 150w\" sizes=\"(max-width: 187px) 100vw, 187px\"><\/p>\n<p align=\"JUSTIFY\">Z wzoru wiemy, \u017ce silnia dla 0 wynosi 1.<\/p>\n<p align=\"JUSTIFY\">silnia(0,1).<\/p>\n<p align=\"JUSTIFY\">Z tego wynika, \u017ce silnia z liczby daje nam wynik.<\/p>\n<p align=\"JUSTIFY\"><span style=\"font-size: large;\">silnia(Liczba,Wynik).<\/span><\/p>\n<p align=\"JUSTIFY\"><strong>PAMI\u0118TAJ! Liczba i Wynik s\u0105 zmiennymi dlatego musimy zapisa\u0107 je du\u017c\u0105 liter\u0105!<\/strong><\/p>\n<p><img loading=\"lazy\" class=\"aligncenter size-full wp-image-229\" src=\"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/wp-content\/uploads\/2017\/08\/s1.png\" alt=\"\" width=\"630\" height=\"418\" srcset=\"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/wp-content\/uploads\/2017\/08\/s1.png 630w, https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/wp-content\/uploads\/2017\/08\/s1-300x199.png 300w, https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/wp-content\/uploads\/2017\/08\/s1-150x100.png 150w\" sizes=\"(max-width: 630px) 100vw, 630px\"><\/p>\n<style type=\"text\/css\">\n\t<!-- @page { size: 21cm 29.7cm; margin: 2cm } P { margin-bottom: 0.21cm } --><br \/>\n\t<\/style>\n<p align=\"JUSTIFY\">W tym momencie zaczynamy tworzy\u0107 regu\u0142\u0119, kt\u00f3ra b\u0119dzie nam oblicza\u0107 silnie dla liczb wi\u0119kszych od 0, wi\u0119c aby by\u0107 pewnym, \u017ce liczba jest wi\u0119ksza od zera zapisujemy odpowiednie sprawdzenie.<\/p>\n<p align=\"JUSTIFY\">Liczba &gt; 0<\/p>\n<p align=\"JUSTIFY\">Kolejnym krokiem jest rozpisanie wzoru n*(n-1)!.<\/p>\n<p align=\"JUSTIFY\"><b>Aby znale\u017a\u0107 silni\u0119 dla naszej Liczby musimy zna\u0107 silni\u0119 dla wyrazu o jeden mniejszego, dopiero wtedy mo\u017cemy obliczy\u0107 Wynik.<\/b><\/p>\n<p align=\"JUSTIFY\">NowejLiczbie przypisujemy warto\u015b\u0107 o jeden mniejsz\u0105 od Liczby. Obliczamy silni\u0119 dla NowejLiczby, a w ostatnim kroku mno\u017cymy nasz\u0105 Liczb\u0119 przez wynik silni nowej liczby i w ten spos\u00f3b otrzymujemy Wynik.<\/p>\n<p align=\"JUSTIFY\">Silnia jest przyk\u0142adem wykorzystania mechanizmu rekurencji, czyli stworzona przez nas regu\u0142a silni w procesie wnioskowania wywo\u0142uj\u0119 sam\u0105 siebie. Jednak\u017ce z definicji rekurencji wiadomo, \u017ce rekurencja potrzebuje co najmniej jednego bazowego przypadku, gdy\u017c w innym razie obliczenia nigdy by si\u0119 nie ko\u0144czy\u0142y \u2013 w przypadku silni nasz\u0105 baz\u0105 jest silnia(0,1). Poszukiwania NowejLiczby ko\u0144cz\u0105 si\u0119, gdy NowaLiczba wynosi 0, dla kt\u00f3rego program zna warto\u015b\u0107 silni.<\/p>\n<p align=\"JUSTIFY\"><a href=\"https:\/\/drive.google.com\/uc?authuser=0&amp;id=0B_oEHEdkstUIR3JXWnZ0VU1UWDQ&amp;export=download\"><strong>POBIERZ PROGRAM<\/strong><\/a><\/p>\n<p align=\"JUSTIFY\">Dla przyk\u0142adu rozpiszmy obliczanie silni dla Liczba=3.<\/p>\n<p align=\"JUSTIFY\">3*(3-1)!, czyli 3*2! &#8211; w tym momencie 2 jest nasz\u0105 now\u0105 liczb\u0105, dla kt\u00f3rej program b\u0119dzie musia\u0142 obliczy\u0107 silnie<\/p>\n<p align=\"JUSTIFY\">2*(2-1)!, czyli 2*1! &#8211; w tym momencie 1 jest nasz\u0105 now\u0105 liczb\u0105, dla kt\u00f3rej program b\u0119dzie musia\u0142 obliczy\u0107 silnie<\/p>\n<p align=\"JUSTIFY\">1*(1-1)!, czyli 1*0!, a 0!=1. &#8211; w tym momencie 0 jest nasz\u0105 now\u0105 liczb\u0105, dla kt\u00f3rej program zna silnie, kt\u00f3ra wynosi 1.&nbsp;<\/p>\n<p align=\"JUSTIFY\">Widzimy zatem, \u017ce program najpierw musi odnale\u017a\u0107 wszystkie liczby, kt\u00f3re b\u0119dzie mo\u017cna przez siebie pomno\u017cy\u0107 \u2013 dla 3! pierwsz\u0105 now\u0105 liczb\u0105 3-1 jest 2, zatem musimy dla naszej nowej liczby obliczy\u0107 nowy wynik, a \u017ceby obliczy\u0107 nowy wynik program zn\u00f3w sprawdza, czy nasza liczba jest wi\u0119ksza od zera, liczba jest wi\u0119ksza od zera, dlatego zn\u00f3w szuka nowej liczby, gdy\u017c nie zna jej nowego wyniku, wykonuje si\u0119 po raz kolejny 2-1, co daje nam 1 i zn\u00f3w program nie mo\u017ce obliczy\u0107 nowego wyniku, wi\u0119c przyr\u00f3wnuje liczb\u0119 do zera, co po raz kolejny daje nam informacje, \u017ce liczba jest wi\u0119ksza i zn\u00f3w nast\u0119puje 1-1, co daje nam 0 i w tym momencie program zna silnie dla 0 \u2013 silnia(0,1). W tym momencie nast\u0119puje wymno\u017cenie 1*1, co daje nam wynik 1, nast\u0119pnie program zdejmuje ze stosu liczb\u0119 2 i mno\u017cy 2*1 \u2013 wynikiem tego dzia\u0142ania jest 2. Ze stosu zostaje \u015bci\u0105gni\u0119ta kolejna liczba, kt\u00f3r\u0105 jest 3 i pomno\u017cenie 3*2, daje nam to ostateczny wynik 6, kt\u00f3ry jest nasz\u0105 poszukiwan\u0105 silni\u0105.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"pgc-228-0-1\" class=\"panel-grid-cell\" data-weight=\"0.48496993987976\">\n<div id=\"panel-228-0-1-0\" class=\"so-panel widget widget_text panel-first-child panel-last-child\" data-index=\"1\" data-style=\"{&quot;background_display&quot;:&quot;tile&quot;}\">\n<div class=\"textwidget\"><embed src=\"http:\/\/swish.swi-prolog.org\/p\/SEHwIifl.pl\" style=\"width: 580px; height: 580px;\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Silnia z liczby naturalnej n to iloczyn wszystkich liczb od 1 do n, czyli n!=1*2*3*&#8230;*(n-1)*n. Maj\u0105c do dyspozycji matematyczny wz\u00f3r silni napiszemy program w prologu obliczaj\u0105cy silnie dla dowolnej liczby. Z wzoru wiemy, \u017ce silnia dla 0 wynosi 1. silnia(0,1). Z tego wynika, \u017ce silnia z liczby daje nam wynik&#8230;.<\/p>\n<p class=\"continue-reading-button\"> <a class=\"continue-reading-link\" href=\"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/2017\/08\/21\/silnia-przyklad-mechanizmu-rekurencji\/\">Czytaj dalej<i class=\"crycon-right-dir\"><\/i><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/posts\/228"}],"collection":[{"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/comments?post=228"}],"version-history":[{"count":2,"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/posts\/228\/revisions"}],"predecessor-version":[{"id":448,"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/posts\/228\/revisions\/448"}],"wp:attachment":[{"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/media?parent=228"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/categories?post=228"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lewandowskit.eduweb.pwste.edu.pl\/prolog\/index.php\/wp-json\/wp\/v2\/tags?post=228"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}