{"id":368133,"date":"2024-05-21T03:36:09","date_gmt":"2024-05-21T03:36:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=368133"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T03:36:09","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=368133","title":{"rendered":"<span>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435: \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435, \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 (\u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0433\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439), \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u044b \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432? \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442: \u0434\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u0442\u043e \u0443\u0436 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0438 \u043f\u043e\u0434\u0430\u0432\u043d\u043e! \u041f\u0440\u0430\u0432\u0434\u0430, \u043f\u0443\u0441\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u043a\u043e\u0434 \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0435\u043d\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0430 \ud83d\ude42<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435. \u0417\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u0442\u043e\u0438\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0439 \u044f\u0437\u044b\u043a\u0430 \u0432 x86 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440. <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\" rel=\"noopener noreferrer nofollow\">\u041c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442<\/a> \u0438\u0437 611 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438 \u0435\u0434\u0438\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"bash\">ssloy@khronos:~\/tinycompiler$ cat *.py|wc -l 611<\/code><\/pre>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u044f \u043d\u0435 \u043c\u0430\u0437\u043e\u0445\u0438\u0441\u0442, \u0438 \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u0434 \u0432 \u043f\u0438\u0442\u043e\u043d, \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0440\u0435\u0437\u0430\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0433\u043e\u043b\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440. \u0422\u0435\u043c\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430: \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/786158\/\" rel=\"noopener noreferrer nofollow\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0438 \u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u0438\u0442\u043e\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/787800\/\" rel=\"noopener noreferrer nofollow\">\u041b\u0435\u043a\u0441\u0435\u0440\/\u043f\u0430\u0440\u0441\u0435\u0440<\/a><\/p>\n<p>2&#8242;. <a href=\"https:\/\/habr.com\/ru\/articles\/787442\/\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0301\u043a\u043b\u044f\u0442\u044b\u0439 \u043e\u0433\u043e\u043d\u044c, \u0438\u043b\u0438 \u043c\u0430\u0433\u0438\u044f \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 C<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/789310\/\" rel=\"noopener noreferrer nofollow\">\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432: \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/793524\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0421\u0442\u0435\u043a \u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u0438\u0442\u043e\u043d \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f)<\/strong><\/a><\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433 \ud83d\ude42<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439: \u043f\u0438\u0448\u0435\u043c \u043b\u0435\u043a\u0441\u0435\u0440 \u0438 \u043f\u0430\u0440\u0441\u0435\u0440 \u0441\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440?<\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430?<\/p>\n<\/li>\n<\/ol>\n<h2>GFX!<\/h2>\n<p>\u041c\u043e\u0439 \u044f\u0437\u044b\u043a \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0435\u043d, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c7c\/3c2\/cdc\/c7c3c2cdc46ed3bc2a3bdee5e374c1ef.png\" width=\"640\" height=\"480\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7c\/3c2\/cdc\/c7c3c2cdc46ed3bc2a3bdee5e374c1ef.png\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/278\/0e5\/04d\/2780e504d3b771136df22f0a3b6b557d.gif\" width=\"320\" height=\"167\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/278\/0e5\/04d\/2780e504d3b771136df22f0a3b6b557d.gif\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ba\/3ca\/bdf\/1ba3cabdffe12035878f31d27e46fdb4.gif\" width=\"336\" height=\"175\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ba\/3ca\/bdf\/1ba3cabdffe12035878f31d27e46fdb4.gif\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7e\/d26\/7ce\/c7ed267ce95eca7c09f06959199bc0e7.gif\" width=\"336\" height=\"280\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7e\/d26\/7ce\/c7ed267ce95eca7c09f06959199bc0e7.gif\"\/><\/figure>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c68\/a91\/cb3\/c68a91cb3b1f4944acab736bf2c86618.gif\" width=\"336\" height=\"175\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c68\/a91\/cb3\/c68a91cb3b1f4944acab736bf2c86618.gif\"\/><\/figure>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\/blob\/main\/test-programs\/gfx\/\" rel=\"noopener noreferrer nofollow\">\u043b\u0435\u0436\u0438\u0442 \u0442\u0443\u0442<\/a>. \u042f \u0443\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/787442\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b<\/a> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043e\u0433\u043d\u044f (\u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043a\u0441\u0435\u0440\u0430), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>\u0417\u043d\u0430\u044e, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0444\u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043d\u043e \u044f \u0442\u0435\u0440\u043f\u0435\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0440\u043e\u0434\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u0438 \u0432\u0441\u044f\u043a\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432 (\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 &#8212; \u044d\u0442\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \ud83d\ude42 ). \u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043d\u0430 \u0447\u0451\u043c-\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u043c \u0434\u043b\u044f \u0432\u0437\u043e\u0440\u0430.<\/p>\n<h2>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445<\/h2>\n<p>\u0424\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0446\u0435\u043b\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 n &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u044b\u0445 n. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0447\u0438\u0441\u043b\u0430 7 \u0440\u0430\u0432\u0435\u043d 7*6*5*4*3*2*1, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u044f\u0435\u0442\u0441\u044f 5040. \u0424\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0447\u0438\u0441\u043b\u0430 n \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a n!, \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e (n-1)!, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, n! = n * (n &#8212; 1)! <\/p>\n<p>\u0421\u0430\u043c\u0430 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f:<\/p>\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' def factorial(n):     result = 1     if n > 1:         result = n * factorial(n-1)     return result  print(factorial(7)) ' 5040<\/code><\/pre>\n<p>\u0421 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0430\u0448\u0438\u043d\u0430 \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u0442\u0430\u043a\u043e\u043c \u043a\u043e\u0434\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? <\/p>\n<p>\u0422\u0438\u043f\u043e\u0432\u043e\u0439 (\u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u0439) \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435\u00a0\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u0412 \u0442\u043e\u0447\u043a\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (+ \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u043e\u043c\u0435\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u0445\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043b\u0430\u0434\u0451\u0442 \u043d\u0430 \u0441\u0442\u0435\u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0441\u0442\u0435\u043a \u043e\u0442 \u0441\u0432\u043e\u0438\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u043e\u0431\u044b\u0447\u043d\u043e\u00a0\u0432 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430).<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0437 \u0441\u0442\u0435\u043a\u0430 \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443. \u041b\u0438\u0431\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434, \u043b\u0438\u0431\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0435\u043a \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u0434\u0438\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430) \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c \u0438 \u043d\u0435 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043a\u0443, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0438\u043d\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u0432 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u043c:<\/p>\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' import inspect  def factorial(n):     result = 1     # \u0432\u043e\u0442 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b:     print(\"instances of n:\", [frame[0].f_locals[\"n\"] for frame in reversed(inspect.stack()[:-1])])     if n > 1:         result = n * factorial(n-1)     return result  print(factorial(7)) ' instances of n: [7] instances of n: [7, 6] instances of n: [7, 6, 5] instances of n: [7, 6, 5, 4] instances of n: [7, 6, 5, 4, 3] instances of n: [7, 6, 5, 4, 3, 2] instances of n: [7, 6, 5, 4, 3, 2, 1] 5040<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 <code>factorial(n)<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u0442\u0435\u043a\u0443, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u0441\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>n<\/code>, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442. \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f 7! \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>factorial(n)<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f 7 \u0440\u0430\u0437, \u0438 \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0430\u0448\u0438\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u0435 7 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>result<\/code> \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0430.<\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/h2>\n<p>\u041f\u0438\u0442\u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430 \u043d\u0430\u0441 \u043c\u0430\u0441\u0441\u0443 \u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0431\u0435\u0437 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u0430\u043c \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c. \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043d\u0435 \u0434\u0430\u0451\u0442 \u0440\u043e\u0441\u043a\u043e\u0448\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0434\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c. \u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0438\u0442\u043e\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043d\u043e \u0443\u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430: \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u043d\u043e \u0441 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \u043f\u0438\u0442\u043e\u043d\u0430. \u0423 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u0432\u0430 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ol>\n<li>\n<p>\u041c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c \u0441\u0440\u0430\u0437\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u043c\u043e\u0433\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u0432 \u043c\u0438\u0440 \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438. \u042f \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c \u0440\u0430\u0437\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0435 \u043c\u043d\u0435 5\/\/-3, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0445 \u043d\u0443\u0436\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044f \u043c\u043e\u0433\u0443 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u0430\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0432 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u043c\u0438\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 print() \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u0443\u0436 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0435\u0431\u0430\u0433\u0435\u0440\u044b &#8212; \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0441\u043d\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043e\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0439 IDE, \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0438 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u0432 \u043d\u0451\u043c \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<\/li>\n<\/ol>\n<p>\u041c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c \u043f\u0438\u0442\u043e\u043d\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0432\u0435\u0434\u0451\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <code>stack<\/code>, \u0438 \u0431\u0443\u0434\u0435\u043c \u0432 \u043d\u0451\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c (\u0440\u0443\u043a\u0430\u043c\u0438!) \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' def factorial():                             # n is stack[-1]     stack.append(1)     if stack[-2] > 1:                        # n is stack[-2], result is stack[-1]         stack.append(stack[-2]-1)         stack[-2] = stack[-3] * factorial()  # n is stack[-3], result is stack[-2]         stack.pop()     return stack.pop()  stack = [] stack.append(7) print(factorial()) stack.pop() ' 5040<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0438\u0442\u043e\u043d\u0430 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e-\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>stack<\/code>. \u042d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a \u044d\u0442\u043e\u0439 \u0438 \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438. \u041e\u0442\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0432\u043e\u044e \u0447\u0430\u0448\u043a\u0443 \u0441 \u0447\u0430\u0435\u043c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u043d\u0430\u0440\u0438\u0441\u0443\u0439\u0442\u0435 \u0441\u0442\u0435\u043a \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0447\u043a\u0435.<\/p>\n<p>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u0440\u0443\u043a\u0430\u043c\u0438, \u0438 \u043c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u044f \u0431\u044b\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u0435\u043a\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>n<\/code>, \u044f \u0431\u044b\u043b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>stack[-1]<\/code>, <code>stack[-2]<\/code> \u0438 <code>stack[-3]<\/code>. \u042d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u0434\u0443\u0431\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431. \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0430\u043d\u0435\u043a\u0434\u043e\u0442\u0430.<\/p>\n<h2>\u041f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u043a\u0440\u043e\u043b\u0438\u043a<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0421\u043b\u0435\u0432\u0430 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 wend, \u0441\u043f\u0440\u0430\u0432\u0430 \u0435\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0432 \u043f\u0438\u0442\u043e\u043d \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\/releases\/tag\/v0.0.3\" rel=\"noopener noreferrer nofollow\">v0.0.3<\/a> \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/789310\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/a>. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 &#8212; \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u043c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ba5\/90b\/5d6\/ba590b5d6e28f4f9fa39c6ceca2fd6b3.png\" width=\"934\" height=\"363\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ba5\/90b\/5d6\/ba590b5d6e28f4f9fa39c6ceca2fd6b3.png\"\/><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043a\u043e\u0434 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043b\u043e\u043c\u0430\u0435\u0442 \u0433\u043b\u0430\u0437\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0435\u0433\u043e \u0434\u0430\u043c \u043f\u0440\u044f\u043c\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>wend<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">fun main() {     fun sopfr(n:int):int {         var div:int;         fun sopfr_aux(n:int):int {             var rec:int;             rec = 0;             if n % div == 0 {                 rec = div;                 if n!=div {                     rec = rec + sopfr_aux(n\/div);                 }             } else {                 div = div + 1;                 rec = sopfr_aux(n);             }             return rec;         }          div = 2;         return sopfr_aux(n);     }      println sopfr(42); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>python<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def main():     def sopfr(n):         def sopfr_aux(n):             nonlocal div             rec = 0             if n % div == 0:                 rec = div                 if n != div:                     rec = rec + sopfr_aux(n \/\/ div)             else:                 div = div + 1                 rec = sopfr_aux(n)             return rec          div = 2         return sopfr_aux(n)      print(sopfr(42))  main()<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441\u0443\u043c\u043c\u0443 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 20 = 5*2*2, \u0442\u0430\u043a \u0447\u0442\u043e sopfr(20) = 2 + 2 + 5 = 9. \u042d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <a href=\"https:\/\/oeis.org\/A001414\" rel=\"noopener noreferrer nofollow\">\u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u043e\u043c<\/a>, \u0447\u0442\u043e \u043d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e sopfr(a * b) = sopfr(a) + sopfr(b). \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \ud83d\ude42<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0449\u0435\u0439:<\/p>\n<ol>\n<li>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a <strong>\u043d\u0435\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439<\/strong> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>div<\/code> \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>sopfr_aux<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0435\u043d\u044f\u043b\u0441\u044f. \u042d\u0442\u043e \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u043e, \u043d\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0441\u0442\u0440\u0430\u0448\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043e\u0431\u0440\u0430\u0449\u0430\u044e\u0441\u044c \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>n<\/code> \u043a\u0430\u043a <code>stack[-1]<\/code>, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>result<\/code> \u0441\u0442\u0435\u043a \u0432\u044b\u0440\u043e\u0441, \u0438 <code>n<\/code> \u0441\u0442\u0430\u043b \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c <code>stack[-2]<\/code>. \u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u043a\u043e\u0434\u0430 \u0441\u0442\u0435\u043a \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435? \u0410 \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e.<\/p>\n<h2>\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 1<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u043e\u043c\u0443 \u043a\u0440\u043e\u043b\u0438\u043a\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>sopfr(n)<\/code>. \u041f\u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 <code>rec = div<\/code>:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/524\/5b2\/320\/5245b2320340675ff514c30de132e3f8.png\" width=\"466\" height=\"303\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/524\/5b2\/320\/5245b2320340675ff514c30de132e3f8.png\"\/><\/figure>\n<p>42 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438 2, 3, 7, \u0442\u043e \u0435\u0441\u0442\u044c, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0439\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0442\u0440\u0438\u0436\u0434\u044b. \u0412\u043e\u0437\u044c\u043c\u0438\u0442\u0435 \u043b\u0438\u0441\u0442\u043e\u0447\u0435\u043a \u0438 \u043a\u0430\u0440\u0430\u043d\u0434\u0430\u0448, \u0438 \u043d\u0430\u0440\u0438\u0441\u0443\u0439\u0442\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0442\u0435\u043a\u0430 \u0432 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445 \u0440\u0430\u0437 (\u043c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0432\u0441\u044f\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0438 \u043a \u0447\u0435\u043c\u0443).<\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u043f\u043e\u043c\u043e\u0433\u0443 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430. \u0424\u0443\u043d\u043a\u0446\u0438\u044f <code>main()<\/code> \u043d\u0430 \u0441\u0442\u0435\u043a \u043a\u043b\u0430\u0434\u0451\u0442 42, \u0438 \u044d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>n<\/code> \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>sopfr(n)<\/code>. \u041e\u043d\u0430, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043a\u043b\u0430\u0434\u0451\u0442 2 \u043d\u0430 \u0441\u0442\u0435\u043a (\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>div<\/code>), \u0438 \u0437\u0430\u0442\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u043a\u043b\u0430\u0434\u0451\u0442 42 (\u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>sopfr_aux(n)<\/code>). \u041d\u0443 \u0430 <code>sopfr_aux<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>rec<\/code>, \u043f\u043e\u043b\u043e\u0436\u0438\u0432 \u043d\u0430 \u0441\u0442\u0435\u043a 0, \u0438 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 42 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 2. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0434\u043e\u0439\u0434\u0451\u043c \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0434\u043e \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u0441\u0442\u0435\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c: [42,2,42,0]. \u0412\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ce\/410\/687\/6ce410687ec8d042d444d427ee348bda.gif\" width=\"517\" height=\"303\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ce\/410\/687\/6ce410687ec8d042d444d427ee348bda.gif\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043e\u0442\u043e\u0440\u0432\u0438\u0442\u0435\u0441\u044c \u043e\u0442 \u0441\u0442\u0430\u0442\u044c\u0438, \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a \u0434\u043b\u044f \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f, \u043d\u043e \u0433\u043e\u0442\u043e\u0432 \u0441\u043f\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u043c\u043d\u043e\u0433\u0438\u0435 \u043e\u0448\u0438\u0431\u0443\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e \u043e\u0448\u0438\u0431\u0441\u044f &#8212; \u043e\u0442\u043f\u0438\u0441\u044b\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u044b, \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c \ud83d\ude42<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0442\u0432\u0435\u0442<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4fd\/bf7\/1ae\/4fdbf71ae5c947e7259333953e127b02.png\" width=\"547\" height=\"333\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4fd\/bf7\/1ae\/4fdbf71ae5c947e7259333953e127b02.png\"\/><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442, \u0432\u043e\u0442 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u0430\u043c\u0443\u044e \u043c\u0430\u043b\u043e\u0441\u0442\u044c \u0438\u043d\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u041f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' import inspect  def main():     def sopfr(n):         def sopfr_aux(n):             nonlocal div             rec = 0             if n % div == 0:                 # breakpoint, print stack                 var = {\"main\":[], \"sopfr\":[\"n\",\"div\"], \"sopfr_aux\":[\"n\",\"rec\"]}                 print([frame[0].f_locals[name] for frame in reversed(inspect.stack()[:-1]) for name in var[frame[3]]])                 rec = div                 if n != div:                     rec = rec + sopfr_aux(n \/\/ div)             else:                 div = div + 1                 rec = sopfr_aux(n)             return rec          div = 2         return sopfr_aux(n)      print(sopfr(42))  main() ' [42, 2, 42, 0] [42, 3, 42, 2, 21, 0, 21, 0] [42, 7, 42, 2, 21, 0, 21, 3, 7, 0, 7, 0, 7, 0, 7, 0, 7, 0] 12<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0441\u043f\u0435\u0448\u0430\u0442 \u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c \u043f\u0438\u0442\u043e\u043d\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b, \u044f \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e \u0441\u0434\u0432\u0438\u0433\u0443 \u043e\u0442 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430, \u0438 \u0443\u0436\u0435 \u0434\u0430\u0436\u0435 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u044d\u0442\u043e\u0442 \u0441\u0434\u0432\u0438\u0433 \u0431\u044b\u043b \u0440\u0430\u0437\u043d\u044b\u043c, \u043d\u043e \u0445\u043e\u0442\u044f \u0431\u044b \u0431\u044b\u043b \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0432 compile time. \u0410 \u0442\u0443\u0442 \u0432\u0441\u0451 \u0441\u0438\u043b\u044c\u043d\u043e \u0438\u043d\u0430\u0447\u0435. \u0414\u043e\u0439\u0434\u044f \u0434\u043e \u043d\u0430\u0448\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u043c\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u043c \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>div<\/code> \u0432 <code>rec<\/code>: \u043e\u0434\u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f, \u0438 \u043e\u043d\u0430 \u0437\u0430\u043a\u043e\u043f\u0430\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u043f\u043e \u0441\u0442\u0435\u043a\u0443; \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b&#8230; \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/589\/cca\/750\/589cca750a1100c89a934ece37bb5547.png\" width=\"186\" height=\"166\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/589\/cca\/750\/589cca750a1100c89a934ece37bb5547.png\"\/><\/figure>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445: <code>main<\/code>, <code>sopfr<\/code>, <code>sopfr_aux<\/code>.<\/p>\n<p>\u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>main<\/code> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043d\u0435\u0442, \u0432 <code>sopfr<\/code> \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>n<\/code> \u0438 <code>div<\/code>, \u0430 \u0432 <code>sopfr_aux<\/code> \u0435\u0441\u0442\u044c \u0434\u0432\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>n<\/code> \u0438 <code>rec<\/code>. <\/p>\n<p>\u0414\u043e  \u0441\u0438\u0445 \u043f\u043e\u0440 \u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c \u043f\u043e \u0438\u0445 \u0438\u043c\u0435\u043d\u0438, \u0442\u0435\u043f\u0435\u0440\u044c \u0436\u0435 \u043f\u043e\u0440\u0430 \u0438\u0445 \u043f\u0440\u043e\u043d\u0443\u043c\u0435\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u043e \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u0437\u0430\u0431\u044b\u0442\u044c. <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\/commit\/0c3ba224d7e1200b0fb15166a48c6af7ac003e70#diff-b60626824b61e9cb42755e5894e5b70f529425116f6c93e40d785f6f31754ffe\" rel=\"noopener noreferrer nofollow\">\u0412\u043e\u0442 diff \u043a\u043e\u043c\u043c\u0438\u0442\u0430,<\/a> \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u041f\u043e \u0444\u0430\u043a\u0442\u0443, \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432\u043e\u0442 \u044d\u0442\u0438 \u0444\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u0435 \u0446\u0438\u0444\u0435\u0440\u043a\u0438:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/be7\/cd9\/81f\/be7cd981f8513cc3871509dc508a38f5.png\" width=\"213\" height=\"167\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/be7\/cd9\/81f\/be7cd981f8513cc3871509dc508a38f5.png\"\/><\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u044f \u0437\u0430\u0445\u043e\u0447\u0443 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>div<\/code>, \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0435\u0451 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u043c\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c 1 \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 1, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043c\u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u043f\u0430\u0440\u044b \u0447\u0438\u0441\u0435\u043b.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0434\u043b\u044f <code>sopfr<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0437\u0440\u044f\u0434\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430. \u041d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u044f \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u0438\u0448\u0443 \u043a\u043e\u0434 \u0440\u0443\u043a\u0430\u043c\u0438, \u043c\u043d\u0435 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u043e\u0434 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u043e\u0439:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2d2\/c29\/188\/2d2c291886ae2e314904268e949ffceb.png\" width=\"936\" height=\"798\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2d2\/c29\/188\/2d2c291886ae2e314904268e949ffceb.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u0418 \u043e\u043d \u0436\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' def main():     def sopfr():         def sopfr_aux():             global display,stack,eax             stack += [None]*1        # allocate memory for one local variable rec             stack += [display[2]]    # save old frame pointer             display[2] = len(stack)-3 # frame pointer for sopfr_aux()             stack[display[2]+1] = 0   # rec = 0              if stack[display[2]+0] % stack[display[1]+1] == 0:  # if n % div == 0                 print(display,stack)  # BREAKPOINT!                 stack[display[2]+1] = stack[display[1]+1]       # rec = div                 if  stack[display[2]+0] != stack[display[1]+1]: # if n != div                     stack += [stack[display[2]+0]\/\/stack[display[1]+1]] # push n\/div \u2510                     sopfr_aux()                                         #            > sopfr_aux(n\/div)                     del stack[-1:]                                      #  pop n\/div \u2518                     stack[display[2]+1] = stack[display[2]+1] + eax             else:                 stack[display[1]+1] = stack[display[1]+1] + 1                 stack +=[stack[display[2]+0]] # push n  \u2510                 sopfr_aux()                   #         > sopfr_aux(n) call                 del stack[-1:]                #  pop n  \u2518                 stack[display[2]+1] = eax              eax = stack[display[2]+1]             display[2] = stack.pop()  # restore frame pointer             del stack[-1:]            # remove rec from stack          global display,stack,eax         stack += [None]*1         # allocate memory for one local variable div         stack += [display[1]]     # save old frame pointer         display[1] = len(stack)-3 # frame pointer for sopfr()         stack[display[1]+1] = 2   # div = 2         stack += [stack[display[1]+0]] # push n \u2510         sopfr_aux()                    #        > sopfr_aux(n)         del stack[-1:]                 #  pop n \u2518         display[1] = stack.pop()  # restore frame pointer         del stack[-1:]            # remove div from stack      global display,stack,eax     stack += [None]*0           # no local variables     stack += [display[0]]       # save old frame pointer     display[0] = len(stack)-1   # frame pointer for main()     stack += [42]               # push 42 \u2510     sopfr()                     #         > sopfr(42)     del stack[-1:]              #  pop 42 \u2518     print(eax)     display[0] = stack.pop()    # restore frame pointer  display = [ None ]*3 # uninitialized frame pointers stack   = []         # empty stack eax     = None       # registers main() ' [0, 1, 4] [None, 42, 2, None, 42, 0, None] [0, 1, 10] [None, 42, 3, None, 42, 2, None, 21, 0, 4, 21, 0, 7] [0, 1, 25] [None, 42, 7, None, 42, 2, None, 21, 0, 4, 21, 3, 7, 7, 0, 10, 7, 0, 13, 7, 0, 16, 7, 0, 19, 7, 0, 22] 12<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043f\u0443\u0433\u0430\u044e\u0449\u0435, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c, \u0447\u0442\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u041f\u0435\u0440\u0432\u043e-\u043d\u0430\u043f\u0435\u0440\u0432\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u0422\u0435\u043f\u0435\u0440\u044c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e <code>stack<\/code>, \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043c\u0430\u0441\u0441\u0438\u0432 <code>display<\/code> \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>eax<\/code>.<\/p>\n<p>\u0421\u0442\u0435\u043a \u0441\u0432\u043e\u0435\u0439 \u0440\u043e\u043b\u0438 \u043d\u0435 \u043c\u0435\u043d\u044f\u043b, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <code>eax<\/code> \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0438 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e <a href=\"https:\/\/en.wikipedia.org\/wiki\/X86_calling_conventions\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u043e \u0432\u044b\u0437\u043e\u0432\u0430\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u043b\u044f x86<\/a>, \u044f \u0431\u0443\u0434\u0443 \u043a\u043b\u0430\u0441\u0442\u044c \u0432 \u044d\u0442\u043e\u0442 &#171;\u0440\u0435\u0433\u0438\u0441\u0442\u0440&#187; \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0441 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c <code>display<\/code> \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0435\u0435. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u043d \u043d\u0435\u043f\u0443\u0441\u0442\u043e\u0439. \u042d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0435\u0433\u043e \u044f\u0447\u0435\u0435\u043a \u0440\u0430\u0432\u043d\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 3. \u0421\u043c\u044b\u0441\u043b \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u044f\u0447\u0435\u0439\u043a\u0443 \u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0441\u0442\u0435\u043a\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>div<\/code> \u043a\u0430\u043a <code>stack[display[1]+1]<\/code>, \u0430 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>rec<\/code> \u043a\u0430\u043a <code>stack[display[2]+1]<\/code>. \u042d\u0442\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043d\u0430\u0433\u043b\u0443\u0445\u043e \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430, \u043a\u0430\u0436\u0434\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435, \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0439 \u043f\u0430\u0440\u043e\u0439 \u0447\u0438\u0441\u0435\u043b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0440\u0451\u043c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c (\u043d\u0430 \u0441\u0442\u0435\u043a, \u043a\u0443\u0434\u0430 \u0436\u0435 \u0435\u0449\u0451) \u0441\u0442\u0430\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 display, \u0430 \u043f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0435\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0442\u0435\u043b\u043e \u043b\u044e\u0431\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 <code>nlocals<\/code> \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445  \u0438 <code>nargs<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">def foo():   global display,stack,eax   stack += [None]*nlocals                     # reserve place for local variables   stack += [display[scope]]                   # save old frame pointer   display[scope] = len(stack)-nlocals-nargs-1 # set new frame pointer for foo()   ...                                         # function body   display[scope] = stack.pop()                # restore old frame pointer   eax = ...                                   # return value   if nlocals>0:                               # remove local variables from stack     del stack[-nlocals:]<\/code><\/pre>\n<p>\u041d\u0443 \u0430 \u0432\u044b\u0437\u043e\u0432 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e: <\/p>\n<ol>\n<li>\n<p>\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u0441\u0442\u0435\u043a <code>nargs<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, <\/p>\n<\/li>\n<li>\n<p>\u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, <\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043e \u0441\u0442\u0435\u043a\u0430 <code>nargs<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<\/li>\n<\/ol>\n<p>\u042f \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u0430\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043b\u0441\u044f \u043d\u0430 sopfr, \u044f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u0446\u0435\u043b\u044b\u0439 \u0434\u0435\u043d\u044c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440. \u041e\u043d \u0445\u043e\u0440\u043e\u0448 \u0442\u0435\u043c, \u0447\u0442\u043e \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0446\u0435\u043b\u044b\u0445 \u0442\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0440\u0430\u0437\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0438 \u0434\u0430\u0436\u0435 \u0435\u0441\u0442\u044c \u043d\u0435\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438 \u0434\u0430\u0436\u0435 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432.<\/p>\n<h2>\u0423\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0435 2<\/h2>\n<p>\u041a\u043e\u0434 \u043c\u044b \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043b\u0438, \u043d\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430-\u0442\u043e \u0435\u0433\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043c \u0436\u0435, \u0433\u0434\u0435 \u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u044f \u043e\u0442\u0440\u0438\u0441\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 <code>display<\/code> \u0438 <code>stack<\/code> \u0432\u0441\u0435 \u0442\u0440\u0438 \u0440\u0430\u0437\u0430. \u0421\u0435\u0439\u0447\u0430\u0441 \u044f \u043f\u0440\u044f\u0442\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0431\u0443\u0434\u0443, \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0441\u0445\u043e\u0434\u0443 \u0441\u0442\u0440\u0435\u043b\u043e\u0447\u043a\u0438 \u043d\u0435 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u0435. \u041d\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043e\u0441\u043e\u0431\u043e \u043d\u0430 \u043e\u0442\u0432\u0435\u0442, \u043d\u0430\u0440\u0438\u0441\u0443\u0439\u0442\u0435 \u0441\u0442\u0435\u043a \u043f\u043e-\u0447\u0435\u0441\u0442\u043d\u043e\u043c\u0443, \u043e\u043d\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0438 \u0432 \u043a\u0430\u043a\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c.<\/p>\n<p>\u041e\u0442\u0432\u0435\u0442:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/18c\/391\/0f7\/18c3910f766d1030faddf3d1d303aaee.png\" width=\"1024\" height=\"422\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/18c\/391\/0f7\/18c3910f766d1030faddf3d1d303aaee.png\"\/><\/figure>\n<h2>\u0424\u0438\u043d\u0438\u0448\u043d\u0430\u044f \u043f\u0440\u044f\u043c\u0430\u044f: \u043e\u0446\u0435\u043d\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439<\/h2>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0438\u0442\u043e\u043d\u0430. \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0442\u0440\u0438\u0445 &#8212; \u044d\u0442\u043e \u043e\u0446\u0435\u043d\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430:<\/p>\n<pre><code class=\"cpp\">fun main() {   var a:int;   var b:int;   [...]   a+b*2   [...] }<\/code><\/pre>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c 0, \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0443 \u043d\u0435\u0451 \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430\u043c\u0438 0 \u0438 1, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0412 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0435\u043d\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043a\u0430\u043a \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>a+b*2<\/code>.<\/p>\n<p>\u0412 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a (\u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e, \u0447\u0442\u043e \u0432 GNU \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438\u043c\u0435\u044e\u0442 \u0432\u0438\u0434 <code>op src dst<\/code>):<\/p>\n<pre><code class=\"assembly\">mov display+0, %eax  # \u043d\u0430\u0439\u0442\u0438 \u0444\u0440\u0435\u0439\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 main mov -1(%eax), %ebx   # \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 b \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 ebx mov -0(%eax), %eax   # \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 a \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 eax imul 2, %ebx         # ebx = 2 * ebx add %ebx, %eax       # eax = eax + ebx<\/code><\/pre>\n<p>\u0412\u0441\u0451 \u0431\u044b \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0443\u0442 \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0445\u0438\u0442\u0440\u0438\u0442\u044c: \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c <code>b<\/code> \u0432 <code>ebx<\/code>, \u043c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>eax<\/code>, \u0442\u0430\u043a \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0447\u0438\u0442\u0430\u043b \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 <code>b<\/code>, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c <code>a<\/code>. \u0410 \u0435\u0449\u0451 \u044f \u0445\u0438\u0442\u0440\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 <code>2*ebx<\/code> \u043d\u0430\u0437\u0430\u0434 \u0432 <code>ebx<\/code>&#8230; \u0410 \u0435\u0449\u0451 \u043d\u0430\u0434\u043e \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e, \u0438 \u043d\u0430 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 <code>a + b * 2 - foo(c - 3, d + 10*d, bar(a\/4))<\/code> \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e.<\/p>\n<p>\u041d\u0443 \u0434\u0430 \u043d\u0435 \u0431\u0435\u0434\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u0447\u0442\u043e \u043f\u0430\u0440\u0441\u0435\u0440 \u043d\u0430\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u043b \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4c7\/cbe\/91a\/4c7cbe91ac0d4cbe79e771cff9c89283.png\" width=\"1228\" height=\"494\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4c7\/cbe\/91a\/4c7cbe91ac0d4cbe79e771cff9c89283.png\"\/><\/figure>\n<p>\u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u0434\u0435\u0440\u0435\u0432\u0430 \u0432 \u0433\u043b\u0443\u0431\u0438\u043d\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0442\u0435\u043a \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435, \u0447\u0442\u043e \u043c\u044b \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c\u0441\u044f \u043e\u0431 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0435\u0449\u0438: \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u0438 \u0442\u043e\u043c \u0436\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>%eax<\/code> (\u043a\u0441\u0442\u0430\u0442\u0438, \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; \u044d\u0442\u043e \u0442\u043e\u0436\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 <code>sopfr<\/code> \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0447\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u0441\u0432\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 <code>%eax<\/code>).<\/p>\n<p>\u0418 \u0442\u043e\u0433\u0434\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f (\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f) \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u044f \u0433\u043e\u0432\u043e\u0440\u044e \u0437\u0434\u0435\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0442\u0438\u043f\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445):<\/p>\n<pre><code class=\"1c\">\u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043b\u0435\u0432\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0432 %eax) push(%eax) \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 (\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0432 %eax) \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c %eax \u0432 %ebx %eax = pop() %eax = \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u043d\u0430\u0434 %eax \u0438 %ebx<\/code><\/pre>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435 a+2*b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0446\u0435\u043d\u0435\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0449\u0438\u043c \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"1c\">\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c a \u0432 %eax                       \\ push(%eax)                               | \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c 2 \u0432 %eax      \\                 | push(%eax)              |                | \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c b \u0432 %eax       | 2*b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e  | a + 2*b \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c %eax \u0432 %ebx  |    \u0432 %eax      |    \u0432 %eax %eax = pop()            |                | %eax = %eax * %ebx     \/                 | \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c %eax \u0432 %ebx                   | %eax = pop()                             | %eax = %eax + %ebx                      \/<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043a\u043e\u0434 \u044f\u0432\u043d\u043e \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u0435\u043d, \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e (\u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043f\u0440\u0438\u0432\u0451\u043b \u0440\u0430\u043d\u0435\u0435, \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0442\u0435\u043a\u0430). \u041d\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u0435\u043d\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435. \u041c\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043e\u0431\u0449\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043e\u0446\u0435\u043d\u043a\u0438 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u0438, \u043f\u043e\u0445\u043e\u0436\u0435, \u043e\u043d \u043d\u0430\u0439\u0434\u0435\u043d! \u041e\u0431 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437 (\u0437\u0430\u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e).<\/p>\n<p>\u0417\u0430\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043e\u0441\u043f\u043e\u0440\u0438\u043c\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e: \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u0441\u0442\u0435\u043a, \u0431\u043e\u043b\u044c\u0448\u0435 \u0435\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u043e! \u0422\u0430\u043a \u0447\u0442\u043e finishing touch \u043d\u0430\u0434 \u043d\u0430\u0448\u0435\u0439 <code>sopfr<\/code>: \u0432\u0441\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 <code>eax<\/code>. \u042f \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u0440\u0443\u043a\u0430\u043c\u0438, \u043d\u043e \u043e\u043f\u044f\u0442\u044c \u0436\u0435, \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430. \u0423\u0437\u0440\u0438\u0442\u0435 \u0436\u0435 \u043f\u0438\u0442\u043e\u043d\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434!<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9ad\/b3d\/c90\/9adb3dc9085164a137a88ad54e57f55c.png\" width=\"748\" height=\"1383\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9ad\/b3d\/c90\/9adb3dc9085164a137a88ad54e57f55c.png\"\/><\/figure>\n<details class=\"spoiler\">\n<summary>\u041e\u043d \u0436\u0435 \u0442\u0435\u043a\u0441\u0442\u043e\u043c<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' def main():     def sopfr():         def sopfr_aux():             global display,stack,eax,ebx             stack += [None]*1         # allocate memory for one local variable rec             stack += [display[2]]     # save old frame pointer             display[2] = len(stack)-3 # frame pointer for sopfr_aux()             eax = 0             stack[display[2]+1] = eax # rec = 0              eax = stack[display[2]+0] # n             stack += [eax]            # stash left argument             eax = stack[display[1]+1] # div             ebx = eax                 # right argument             eax = stack.pop()         # recall left arg             eax = eax % ebx           # n % div             stack += [eax]            # stash left argument             eax = 0             ebx = eax                 # right argument             eax = stack.pop()         # recall left arg             eax = eax == ebx          # n % div == 0             if eax:  # if n % div == 0                 print(display,stack)  # BREAKPOINT!                 eax = stack[display[1]+1] # div                 stack[display[2]+1] = eax # rec = div                 eax = stack[display[2]+0] # n                 stack += [eax]            # stash left argument                 eax = stack[display[1]+1] # div                 ebx = eax                 # right argument                 eax = stack.pop()         # recall left arg                 eax = eax != ebx          # n != div                 if eax: # if n != div                     eax = stack[display[2]+1] # rec                     stack += [eax]            # stash left argument                     eax = stack[display[2]+0] # n                     stack += [eax]            # stash left argument                     eax = stack[display[1]+1] # div                     ebx = eax                 # right argument                     eax = stack.pop()         # recall left arg                     eax = eax \/\/ ebx          # n\/div      \u2510                     stack += [eax]            #            \u2502 sopfr_aux(n\/div)                     sopfr_aux()               #            \u2502                     del stack[-1:]            #  pop n\/div \u2518                     ebx = eax                 # right argument                     eax = stack.pop()         # recall left arg                     eax = eax + ebx           # rec + sopfr_aux(n\/div)                     stack[display[2]+1] = eax # rec = rec + sopfr_aux(n\/div)             else:                 eax = stack[display[1]+1] # div                 stack += [eax]            # stash left argument                 eax = 1                 ebx = eax                 # right argument                 eax = stack.pop()         # recall left arg                 eax = eax + ebx           # div + 1                 stack[display[1]+1] = eax # div = div + 1                 eax = stack[display[2]+0] # push n \u2510                 stack +=[eax]             #        \u2502 sopfr_aux(n) call                 sopfr_aux()               #        \u2502                 del stack[-1:]            #  pop n \u2518                 stack[display[2]+1] = eax              eax = stack[display[2]+1]             display[2] = stack.pop()  # restore frame pointer             del stack[-1:]            # remove rec from stack          global display,stack,eax,ebx         stack += [None]*1         # allocate memory for one local variable div         stack += [display[1]]     # save old frame pointer         display[1] = len(stack)-3 # frame pointer for sopfr()         eax = 2         stack[display[1]+1] = eax # div = 2         eax = stack[display[1]+0] # push n \u2510         stack += [eax]            #        \u2502 sopfr_aux(n)         sopfr_aux()               #        \u2502         del stack[-1:]            #  pop n \u2518         display[1] = stack.pop()  # restore frame pointer         del stack[-1:]            # remove div from stack      global display,stack,eax,ebx     stack += [None]*0           # no local variables     stack += [display[0]]       # save old frame pointer     display[0] = len(stack)-1   # frame pointer for main()     eax = 42                    # push 42 \u2510     stack += [eax]              #         \u2502 sopfr(42)     sopfr()                     #         \u2502     del stack[-1:]              #  pop 42 \u2518     print(eax)     display[0] = stack.pop()    # restore frame pointer  display = [ None ]*3 # uninitialized frame pointers stack   = []         # empty stack eax,ebx = None,None  # registers main() ' [0, 1, 4] [None, 42, 2, None, 42, 0, None] [0, 1, 11] [None, 42, 3, None, 42, 2, None, 2, 21, 0, 4, 21, 0, 8] [0, 1, 27] [None, 42, 7, None, 42, 2, None, 2, 21, 0, 4, 21, 3, 8, 3, 7, 0, 11, 7, 0, 15, 7, 0, 18, 7, 0, 21, 7, 0, 24] 12<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<h2>\u041f\u043e\u0434\u0432\u043e\u0434\u0438\u043c \u0438\u0442\u043e\u0433<\/h2>\n<p>\u041f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435, \u0442\u0430\u043a \u044d\u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c\u043e\u0441\u0442\u044c \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043e\u0446\u0435\u043d\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043e\u043d\u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0433\u043e\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043c\u043e\u0437\u0433\u0430, \u0432\u0441\u0451 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043f\u0438\u043d\u043d\u043e\u0433\u043e, \u0447\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p><a href=\"https:\/\/github.com\/ssloy\/tinycompiler\/commit\/0c3ba224d7e1200b0fb15166a48c6af7ac003e70\" rel=\"noopener noreferrer nofollow\">\u0412\u043e\u0442 \u0437\u0434\u0435\u0441\u044c<\/a> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430, \u0438\u0445 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e. \u0412\u0435\u0440\u0441\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f &#8212; <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\/releases\/tag\/v0.0.4\" rel=\"noopener noreferrer nofollow\">v0.0.4<\/a>.<\/p>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u043c\u044b (\u043f\u043e\u0447\u0442\u0438) \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043d\u0438\u0447\u0435\u043c \u043e\u0442 \u043f\u0438\u0442\u043e\u043d\u0430, \u0447\u0442\u043e \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 &#8212; \u044d\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0440\u0430\u0444\u0430\u0440\u0435\u0442, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u0438\u0448\u0435\u043c \u043a\u043e\u0434. \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u0430\u043a \u0440\u0430\u0437 \u043e\u0431 \u044d\u0442\u043e\u043c \u0438 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c!<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/793524\/\"> https:\/\/habr.com\/ru\/articles\/793524\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u043e\u043f\u0440\u043e\u0441 \u0438\u0437 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043d\u0435\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0432\u044b \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435, \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 (\u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0433\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439), \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u044b \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432? \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u0442\u0432\u0435\u0442: \u0434\u0430 \u043b\u044e\u0431\u043e\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u0442\u043e \u0443\u0436 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0438 \u043f\u043e\u0434\u0430\u0432\u043d\u043e! \u041f\u0440\u0430\u0432\u0434\u0430, \u043f\u0443\u0441\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u043a\u043e\u0434 \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0435\u043d\u044f \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0430 \ud83d\ude42<\/p>\n<p>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440 \u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0437\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435. \u0417\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u0442\u043e\u0438\u0442 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438\u0437 \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u043d\u043e\u0439 \u044f\u0437\u044b\u043a\u0430 \u0432 x86 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440. <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\" rel=\"noopener noreferrer nofollow\">\u041c\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442<\/a> \u0438\u0437 611 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043d\u0438 \u0435\u0434\u0438\u043d\u043e\u0439 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438:<\/p>\n<pre><code class=\"bash\">ssloy@khronos:~\/tinycompiler$ cat *.py|wc -l 611<\/code><\/pre>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u044f \u043d\u0435 \u043c\u0430\u0437\u043e\u0445\u0438\u0441\u0442, \u0438 \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u0434 \u0432 \u043f\u0438\u0442\u043e\u043d, \u0438 \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0440\u0435\u0437\u0430\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0433\u043e\u043b\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440. \u0422\u0435\u043c\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0435\u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0430: \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445.<\/p>\n<h2>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h2>\n<ol>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/786158\/\" rel=\"noopener noreferrer nofollow\">\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u044c\u044f \u0438 \u043d\u0430\u0438\u0432\u043d\u044b\u0439 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u0438\u0442\u043e\u043d<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/787800\/\" rel=\"noopener noreferrer nofollow\">\u041b\u0435\u043a\u0441\u0435\u0440\/\u043f\u0430\u0440\u0441\u0435\u0440<\/a><\/p>\n<p>2&#8242;. <a href=\"https:\/\/habr.com\/ru\/articles\/787442\/\" rel=\"noopener noreferrer nofollow\">\u041f\u0440\u043e\u0301\u043a\u043b\u044f\u0442\u044b\u0439 \u043e\u0433\u043e\u043d\u044c, \u0438\u043b\u0438 \u043c\u0430\u0433\u0438\u044f \u043f\u0440\u0435\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 C<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/789310\/\" rel=\"noopener noreferrer nofollow\">\u0422\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432: \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u043e\u0432<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/793524\/\" rel=\"noopener noreferrer nofollow\"><strong>\u0421\u0442\u0435\u043a \u0438 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0432 \u043f\u0438\u0442\u043e\u043d \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (\u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f)<\/strong><\/a><\/p>\n<\/li>\n<li>\n<p>\u0422\u0440\u0430\u043d\u0441\u043b\u044f\u0442\u043e\u0440 \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0438\u043d\u0433 \ud83d\ude42<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u043c\u0441\u044f \u043e\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439: \u043f\u0438\u0448\u0435\u043c \u043b\u0435\u043a\u0441\u0435\u0440 \u0438 \u043f\u0430\u0440\u0441\u0435\u0440 \u0441\u0430\u043c\u0438<\/p>\n<\/li>\n<li>\n<p>\u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440?<\/p>\n<\/li>\n<li>\n<p>\u0421\u0431\u043e\u0440\u0449\u0438\u043a \u043c\u0443\u0441\u043e\u0440\u0430?<\/p>\n<\/li>\n<\/ol>\n<h2>GFX!<\/h2>\n<p>\u041c\u043e\u0439 \u044f\u0437\u044b\u043a \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0435\u043d, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u0443\u0440\u0441\u0430:<\/p>\n<figure class=\"full-width\"><\/figure>\n<figure class=\"\"><\/figure>\n<figure class=\"\"><\/figure>\n<figure class=\"\"><\/figure>\n<figure class=\"\"><\/figure>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u044d\u0442\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\/blob\/main\/test-programs\/gfx\/\" rel=\"noopener noreferrer nofollow\">\u043b\u0435\u0436\u0438\u0442 \u0442\u0443\u0442<\/a>. \u042f \u0443\u0436\u0435 <a href=\"https:\/\/habr.com\/ru\/articles\/787442\/\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b<\/a> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043e\u0433\u043d\u044f (\u0438 \u0437\u0430\u043e\u0434\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u043a\u0441\u0435\u0440\u0430), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 \u043e\u0447\u0435\u0440\u0435\u0434\u0438.<\/p>\n<p>\u0417\u043d\u0430\u044e, \u0447\u0442\u043e \u0443 \u043c\u0435\u043d\u044f \u043f\u0440\u043e\u0444\u0434\u0435\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u043d\u043e \u044f \u0442\u0435\u0440\u043f\u0435\u0442\u044c \u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0440\u043e\u0434\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0447\u0438\u0441\u0435\u043b \u0424\u0438\u0431\u043e\u043d\u0430\u0447\u0447\u0438 \u0438 \u0432\u0441\u044f\u043a\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u0432 (\u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 &#8212; \u044d\u0442\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \ud83d\ude42 ). \u042f \u0445\u043e\u0447\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0438 \u0441\u0442\u0443\u0434\u0435\u043d\u0442\u044b \u043c\u043e\u0433\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043d\u0430 \u0447\u0451\u043c-\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u043c \u0434\u043b\u044f \u0432\u0437\u043e\u0440\u0430.<\/p>\n<h2>\u0420\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u0434\u043b\u044f \u0441\u0430\u043c\u044b\u0445 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445<\/h2>\n<p>\u0424\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0446\u0435\u043b\u043e\u0433\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 n &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b, \u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u044b\u0445 n. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0447\u0438\u0441\u043b\u0430 7 \u0440\u0430\u0432\u0435\u043d 7*6*5*4*3*2*1, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u044f\u0435\u0442\u0441\u044f 5040. \u0424\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0447\u0438\u0441\u043b\u0430 n \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a n!, \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u0435\u0433\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e (n-1)!, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e, n! = n * (n &#8212; 1)! <\/p>\n<p>\u0421\u0430\u043c\u0430 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u0430\u044f \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f:<\/p>\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' def factorial(n):     result = 1     if n > 1:         result = n * factorial(n-1)     return result  print(factorial(7)) ' 5040<\/code><\/pre>\n<p>\u0421 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e \u0441 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0437\u0430 \u0441\u043a\u043e\u0431\u043a\u0430\u043c\u0438 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0430\u0448\u0438\u043d\u0430 \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0432 \u0442\u0430\u043a\u043e\u043c \u043a\u043e\u0434\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442? <\/p>\n<p>\u0422\u0438\u043f\u043e\u0432\u043e\u0439 (\u043d\u0435 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0439, \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0438\u043f\u043e\u0432\u043e\u0439) \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435\u00a0\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ol>\n<li>\n<p>\u0412 \u0442\u043e\u0447\u043a\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (+ \u043e\u0431\u044b\u0447\u043d\u043e \u043d\u043e\u043c\u0435\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u0445\u043e\u0434\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043b\u0430\u0434\u0451\u0442 \u043d\u0430 \u0441\u0442\u0435\u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u0441\u0442\u0435\u043a \u043e\u0442 \u0441\u0432\u043e\u0438\u0445 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u043e\u0431\u044b\u0447\u043d\u043e\u00a0\u0432 \u043e\u0434\u0438\u043d \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430).<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0437 \u0441\u0442\u0435\u043a\u0430 \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443. \u041b\u0438\u0431\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0435\u0440\u0435\u0434, \u043b\u0438\u0431\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0442\u0435\u043a \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u0434\u0438\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430) \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u0432\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043d\u0430\u0431\u043e\u0440 \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c \u0438 \u043d\u0435 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0448\u043a\u0443, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0438\u043d\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0446\u0438\u0438 \u0432 \u043d\u0430\u0448 \u043a\u043e\u0434 \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u043c:<\/p>\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' import inspect  def factorial(n):     result = 1     # \u0432\u043e\u0442 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b:     print(\"instances of n:\", [frame[0].f_locals[\"n\"] for frame in reversed(inspect.stack()[:-1])])     if n > 1:         result = n * factorial(n-1)     return result  print(factorial(7)) ' instances of n: [7] instances of n: [7, 6] instances of n: [7, 6, 5] instances of n: [7, 6, 5, 4] instances of n: [7, 6, 5, 4, 3] instances of n: [7, 6, 5, 4, 3, 2] instances of n: [7, 6, 5, 4, 3, 2, 1] 5040<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 <code>factorial(n)<\/code> \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043c\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0441\u0442\u0435\u043a\u0443, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0432\u0441\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>n<\/code>, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442. \u0414\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f 7! \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>factorial(n)<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f 7 \u0440\u0430\u0437, \u0438 \u043d\u0435\u0442\u0440\u0443\u0434\u043d\u043e \u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u0430\u0448\u0438\u043d\u0430 \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u0435 7 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>result<\/code> \u0440\u043e\u0432\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u0430.<\/p>\n<h2>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/h2>\n<p>\u041f\u0438\u0442\u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0437\u0430 \u043d\u0430\u0441 \u043c\u0430\u0441\u0441\u0443 \u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0431\u0435\u0437 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u0438 \u043d\u0430\u043c \u043d\u0435 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c. \u0410\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043d\u0435 \u0434\u0430\u0451\u0442 \u0440\u043e\u0441\u043a\u043e\u0448\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u0430\u0434\u043e \u0440\u0443\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c. \u042f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0438\u0442\u043e\u043d \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u043d\u043e \u0443\u0440\u0435\u0437\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430: \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u043d\u043e \u0441 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c \u043f\u0438\u0442\u043e\u043d\u0430. \u0423 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0434\u0432\u0430 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ol>\n<li>\n<p>\u041c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c \u0441\u0440\u0430\u0437\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u044f \u043c\u043e\u0433\u0443 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c, \u043d\u043e \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d \u0441\u0440\u0430\u0437\u0443 \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u0432 \u043c\u0438\u0440 \u0441 \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438. \u042f \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0433\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c \u0440\u0430\u0437\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e\u0435 \u043c\u043d\u0435 5\/\/-3, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u0438\u043b\u043e\u043c\u0435\u0442\u0440\u043e\u0432\u043e\u0439 \u043f\u043e\u0440\u0442\u044f\u043d\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0445 \u043d\u0443\u0436\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c\u0438 \u0444\u043b\u0430\u0433\u0430\u043c\u0438. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044f \u043c\u043e\u0433\u0443 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438 \u0434\u043e\u043f\u0438\u043b\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u043a\u0443\u0441\u043e\u0447\u043a\u0430\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u043c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043f\u0440\u044b\u0433\u0430\u0442\u044c \u0441 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0432 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0434\u0440\u0443\u0436\u0435\u043b\u044e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u043c\u0438\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 print() \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0430 \u0443\u0436 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0434\u0435\u0431\u0430\u0433\u0435\u0440\u044b &#8212; \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0441\u043d\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u0438\u043c\u044b\u0439 \u043e\u0441\u0432\u043e\u0435\u043d\u043d\u044b\u0439 IDE, \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430, \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u0438 \u043a\u043e\u043c\u0444\u043e\u0440\u0442\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u0432 \u043d\u0451\u043c \u043f\u043e\u0448\u043b\u043e \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<\/li>\n<\/ol>\n<p>\u041c\u044b \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c \u043f\u0438\u0442\u043e\u043d\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u044d\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0437\u0430\u0432\u0435\u0434\u0451\u043c \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 <code>stack<\/code>, \u0438 \u0431\u0443\u0434\u0435\u043c \u0432 \u043d\u0451\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b \u0438 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c (\u0440\u0443\u043a\u0430\u043c\u0438!) \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"python\">ssloy@khronos:~$ python3 &lt;&lt;&lt;' def factorial():                             # n is stack[-1]     stack.append(1)     if stack[-2] > 1:                        # n is stack[-2], result is stack[-1]         stack.append(stack[-2]-1)         stack[-2] = stack[-3] * factorial()  # n is stack[-3], result is stack[-2]         stack.pop()     return stack.pop()  stack = [] stack.append(7) print(factorial()) stack.pop() ' 5040<\/code><\/pre>\n<p>\u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u0438\u0442\u043e\u043d\u0430 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e-\u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 <code>stack<\/code>. \u042d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a \u044d\u0442\u043e\u0439 \u0438 \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043c\u044b\u0441\u043b\u044c \u0441\u0442\u0430\u0442\u044c\u0438. \u041e\u0442\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u0432\u043e\u044e \u0447\u0430\u0448\u043a\u0443 \u0441 \u0447\u0430\u0435\u043c, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043a\u043e\u0434 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u043d\u0430\u0440\u0438\u0441\u0443\u0439\u0442\u0435 \u0441\u0442\u0435\u043a \u043d\u0430 \u043b\u0438\u0441\u0442\u043e\u0447\u043a\u0435.<\/p>\n<p>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u0440\u0443\u043a\u0430\u043c\u0438, \u0438 \u043c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0447\u0442\u043e \u044f \u0431\u044b\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u0435\u043a\u0435. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043e\u0434\u043d\u043e\u0439 \u0438 \u0442\u043e\u0439 \u0436\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>n<\/code>, \u044f \u0431\u044b\u043b \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0442\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f <code>stack[-1]<\/code>, <code>stack[-2]<\/code> \u0438 <code>stack[-3]<\/code>. \u042d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u0434\u0443\u0431\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431. \u0421\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438\u0437 \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0430\u043d\u0435\u043a\u0434\u043e\u0442\u0430.<\/p>\n<h2>\u041f\u043e\u0434\u043e\u043f\u044b\u0442\u043d\u044b\u0439 \u043a\u0440\u043e\u043b\u0438\u043a<\/h2>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043e\u0442\u043b\u043e\u0436\u0438\u043c \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0421\u043b\u0435\u0432\u0430 \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 wend, \u0441\u043f\u0440\u0430\u0432\u0430 \u0435\u0433\u043e \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0432 \u043f\u0438\u0442\u043e\u043d \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 <a href=\"https:\/\/github.com\/ssloy\/tinycompiler\/releases\/tag\/v0.0.3\" rel=\"noopener noreferrer nofollow\">v0.0.3<\/a> \u043c\u043e\u0435\u0433\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u0430 \u0432 <a href=\"https:\/\/habr.com\/ru\/articles\/789310\/\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u043e\u0448\u043b\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432<\/a>. \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 &#8212; \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0440\u0443\u043a\u0430\u043c\u0438 \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u043c.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043a\u043e\u0434 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043b\u043e\u043c\u0430\u0435\u0442 \u0433\u043b\u0430\u0437\u0430, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u044f \u0435\u0433\u043e \u0434\u0430\u043c \u043f\u0440\u044f\u043c\u044b\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u043c:<\/p>\n<details class=\"spoiler\">\n<summary>wend<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">fun main() {     fun sopfr(n:int):int {         var div:int;         fun sopfr_aux(n:int):int {             var rec:int;             rec = 0;             if n % div == 0 {                 rec = div;                 if n!=div {                     rec = rec + sopfr_aux(n\/div);                 }             } else {                 div = div + 1;                 rec = sopfr_aux(n);             }             return rec;         }          div = 2;         return sopfr_aux(n);     }      println sopfr(42); }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<details class=\"spoiler\">\n<summary>python<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"python\">def main():     def sopfr(n):         def sopfr_aux(n):             nonlocal div             rec = 0             if n % div == 0:                 rec = div                 if n != div:                     rec = rec + sopfr_aux(n \/\/ div)             else:                 div = div + 1                 rec = sopfr_aux(n)             return rec          div = 2         return sopfr_aux(n)      print(sopfr(42))  main()<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432\u044b\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0441\u0443\u043c\u043c\u0443 \u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 20 = 5*2*2, \u0442\u0430\u043a \u0447\u0442\u043e sopfr(20) = 2 + 2 + 5 = 9. \u042d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0447\u0430\u0441\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <a href=\"https:\/\/oeis.org\/A001414\" rel=\"noopener noreferrer nofollow\">\u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u043e\u043c<\/a>, \u0447\u0442\u043e \u043d\u0435\u0443\u0434\u0438\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e sopfr(a * b) = sopfr(a) + sopfr(b). \u041c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0437\u0443\u0447\u0430\u044e\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u043d\u0430\u0448\u0435\u0433\u043e \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f \ud83d\ude42<\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0435\u0449\u0435\u0439:<\/p>\n<ol>\n<li>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0440\u0430\u0437\u043d\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a <strong>\u043d\u0435\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439<\/strong> \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>div<\/code> \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>sopfr_aux<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0430\u043b\u043e\u043c \u043c\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-368133","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368133","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=368133"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/368133\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=368133"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=368133"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=368133"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}