Հիմնական նյութ
Համակարգչային գիտություն
Դասընթաց․ (Համակարգչային գիտություն) > Բաժին 1
Դաս 6: Ռեկուրենտ ալգորիթմներ- Ռեկուրսիա
- Ֆակտորիալ ֆունկցիան
- Մարտահրավեր․ կրկնողական ֆակտորիալ
- Ռեկուրենտ ֆակտորիալ
- Մարտահրավեր․ ռեկուրենտ ֆակտորիալ
- Ռեկուրենտ ալգորիթմների հատկությունները
- Օգտագործելով ռեկուրսիա՝ գտիր այն բառերը, որոնք պալինդրոմ են
- Մարտահրավեր․ պալինդրոմ տողայիններ
- Հաշվել թվի աստիճանները
- Մարտահրավեր․ ռեկուրսիվ աստիճաններ
- Սիերպինսկիի եռանկյունը
- Նախագիծ․ ռեկուրենտ արվեստ
© 2023 Khan AcademyՕգտագործման պայմաններԳաղտնիության քաղաքականությունՔուքի (Cookie) ծանուցում
Ռեկուրենտ ալգորիթմների հատկությունները
Ահա ռեկուրենտ ալգորիթմների հիմնական միտքը․
Խնդիրը լուծելու համար լուծիր ենթախնդիր, որը նույն խնդրի ավելի փոքր տարբերակն է, և ենթախնդրի լուծումն օգտագործելով՝ լուծիր խնդիրը։
n, ! հաշվելիս մենք լուծեցինք n, !-ը (սկզբնական խնդիրը)՝ հաշվելով ենթախնդրի արժեքը, այսինքն՝ հաշվելով ավելի փոքր թվի ֆակտորիալը՝ 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, !։ Արի ստեղծենք նոր փոփոխական՝ m և այն հավասարեցնենք n, plus, 1-ին։ Քանի որ բանաձևը գործում է բոլոր դրական թվերի համար, արի m գրենք n-ի փոխարեն՝ 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։ Այս բանաձևով կարող ենք երթադրել, որ կկարողանանք հաշվել n, !-ը՝ սկզբում գտնելով left parenthesis, n, plus, 1, right parenthesis, !-ը և այն բաժանելով n, plus, 1-ի։ Բայց left parenthesis, n, plus, 1, right parenthesis, !-ը հաշվելու համար պետք է գտնես left parenthesis, n, plus, 2, right parenthesis, !-ը, հետո՝ left parenthesis, n, plus, 3, right parenthesis, !-ը, և այսպես շարունակ։ Դու երբեք չես հասնի 0\ դեպքին։ Ինչո՞ւ։ Որովհետև ամեն ռեկուրենտ ենթախնդիրը հաշվում է նախորդից ավելի մեծ թվի արժեքը, ոչ թե ավելի փոքր։ Եթե n-ը դրական է, դու այդպես երբեք չես հասնի առաջնային դեպքին՝ 0-ին։
Ռեկուրսիայի այս միտքը կարող ենք ներկայացնել երկու կանոնի տեսքով․
- Ամեն հաջորդ ռեկուրենտ կանչը պետք է լինի ավելի փոքր արժեքի համար, այսինքն՝ լինի ավելի փոքր ենթախնդիր։
- Ռեկուրենտ կանչերն ինչ-որ պահի պետք է հասնեն առաջնային դեպքի, որը լուծվում է առանց ռեկուրսիայի։
Նույնը պատկերացնենք ռուսական տիկնիկի՝ մատրյոշկայի օրինակով։ Չնայած դրանք որևէ ալգորիթմի հետ կապ չունեն, բայց յուրաքանչյուր տիկնիկ ծածկում է իրենից ավելի փոքր տիկնիկին (ճիշտ ռեկուրենտ ալգորիթմի նման) այնքան, մինչև ամենափոքրը չի ծածկում ոչ մի տիկնիկ (առաջնային դեպքի պես)։
Նյութը ստեղծվել է Դարթմութի համակարգչային գիտությունների դասախոսներ Թոմաս Քորմենի և Դեվին Բալկքոմի, ինչպես նաև «Քան» ակադեմիայի ծրագրավորման թիմի կողմից։ Նյութը լիցենզավորվել է CC-BY-NC-SA-ի կողմից։
Ուզո՞ւմ ես միանալ խոսակցությանը։
Առայժմ հրապարակումներ չկան։