If you're seeing this message, it means we're having trouble loading external resources on our website.

Егер веб фильтрлерін қолдансаң, *.kastatic.org мен *.kasandbox.org домендері бұғатталмағанын тексер.

Негізгі бет

Рекурсивті алгоритмдердің қасиеттері

Төменде рекурсивті алгоритмдердің негізгі идеясы берілген:
Берілген есепті шешу үшін алдымен ішкі есепті, яғни дәл сол есептің кіші қосалқы нұсқасын шешу керек. Сол ішкі есептің шешімін бастапқы есептің шешімін табуда қолданамыз.
n, ! шешімін табу үшін біз, алдымен, ішкі есептің шешімін таптық. Ол үшін n-нен кіші n, minus, 1 санын алып, оның факториалынleft parenthesis, n, minus, 1, right parenthesis, ! (бастапқы есептің кіші нұсқасы) есептедік. Алынған шешімді бастапқы есептің, яғни n, ! мәнін табу үшін қолдандық.
Рекурсивті алгоритм жұмыс істеуі үшін ішкі есептер нәтижесінде бастапқы нұсқаға келуі керек. n, !-ды есептегенде ішкі есептер 0, ! мәні табылғанға дейін кішірейе береді. Соңында негізгі есепке келгеніңізге көзіңізді жеткізіңіз.
Мысалы, рекурсивті әдісті қолдана отырып, теріс санның факториалын тапсақ не болатынын көрейік. left parenthesis, minus, 1, right parenthesis, !-ды есептеу үшін біз left parenthesis, minus, 2, right parenthesis, !-ды табуымыз керек. Алынған нәтижені minus, 1-ге көбейтеміз. Бірақ left parenthesis, minus, 2, right parenthesis, ! мәнін табу үшін алдымен left parenthesis, minus, 3, right parenthesis, !-дың шешімі керек. Ол шешімді minus, 2-ге көбейтеміз. Содан соң left parenthesis, minus, 3, right parenthesis, !-ды есептеп, әрі қарай осылай жалғастырамыз. Иә, сандардың мәні кішірейіп бара жатыр. Бірақ олар бастапқы 0, !-ды есептеу нұсқасынан алыстап бара жатыр. Осылайша жауап ешқашан табыла алмайды.
n -нің мәні теріс емес болатындығына кепілдік бергеннің өзінде де, ішкі есептер үдемелі кішіреймесе, бізде проблема туындауы мүмкін. Келесі мысалды қарастырайық. n, !, equals, n, dot, left parenthesis, n, minus, 1, right parenthesis, ! формуласын алып, екі жағын n-ге бөлейік. Нәтижесінде n, !, slash, n, equals, left parenthesis, n, minus, 1, right parenthesis, ! аламыз. Енді n, plus, 1-ге тең болатын жаңа m айнымалысын енгізейік. Біздің формула барлық оң сандар үшін қолданылатындықтан, n-ді m-мен алмастырайық, сонда m, !, slash, m, equals, left parenthesis, m, minus, 1, right parenthesis, ! болады. m, equals, n, plus, 1 болғандықтан, left parenthesis, n, plus, 1, right parenthesis, !, slash, left parenthesis, n, plus, 1, right parenthesis, equals, left parenthesis, n, plus, 1, minus, 1, right parenthesis, ! формуласын аламыз. Екі жағын орындарымен ауыстырып және n, plus, 1, minus, 1, equals, n болатындығын ескере отырып, n, !, equals, left parenthesis, n, plus, 1, right parenthesis, !, slash, left parenthesis, n, plus, 1, right parenthesis формуласын аламыз. Бұл формула алдымен left parenthesis, n, plus, 1, right parenthesis, ! мәнін тауып, нәтижені n, plus, 1-ге бөлу арқылы n, !-ды есептеу мүмкін екендігіне сендіреді. Бірақ left parenthesis, n, plus, 1, right parenthesis, ! есептеу үшін біз, біріншіден, left parenthesis, n, plus, 2, right parenthesis, !-дың, содан соң left parenthesis, n, plus, 3, right parenthesis, !-дың және тағы басқаларының мәнін табуымыз керек. Солайша біз бастапқы 0 нұсқасына ешқашан жете алмаймыз. Неліктен? Себебі әр рекурсивті ішкі есеп бізден кішірек санның орнына үлкенірек санды табуды сұрайды. Егер n оң сан болса, негізгі 0 нұқасына жету мүмкін емес болады.
Рекурсия идеясын екі қарапайым ережеге бөлуге болады:
  1. Әрбір рекурсивті шақыру дәл сол есептің кіші нұсқасында, яғни кіші ішкі есебінде орындалуы керек.
  2. Рекурсивті шақырулар нәтижесінде одан әрі рекурсиясыз шешілетін бастапқы есепке келулері керек.
Матрешка қуыршақтарына оралайық. Олар ешқандай алгоритмге қатыспаса да, ең кішкентай қуыршаққа дейін(бастапқы нұсқаға ұқсас) әр қуыршақтың ішінде өзінен кіші қуыршақ бар(рекурсивті жағдайға ұқсас) екендігін көре аламыз.

Бұл мазмұн ынтымақтастықтың нәтижесі Дартмут компьютерлік ғылымы профессорлар [Томас Кормен](http://www.cs.dartmouth.edu / ~thc/) және [Дэвин Бэлком](http://www.cs.dartmouth.edu / ~devin/), сонымен қатар Хан академиясының компьютерлік оқу бағдарламасы бойынша тобы. Мазмұн лицензияланған CC-BY-NC-SA.