האָבן איר אלץ געכאפט אין אַ פּאָנעם אַנענדינג ציקל ווו אַ פּראָבלעם האלט בראַנטשינג אין קלענערער פראַגמאַנץ?
אויב אַזוי, איר קען האָבן קומען אויף די יקסייטינג וועלט פון רעקורסיאָן. כאָטש עס קען ויסקומען צו זיין טשאַלאַנדזשינג צו פֿאַרשטיין, טאָן ניט זאָרג! אין דעם פּאָסטן, מיר וועלן גיין אויף אַ טשיקאַווע נסיעה צו לערנען וועגן טייפּס פון רעקורסיאָנס.
אַזוי בלעכע זיך ווי מיר ויספאָרשן פילע רעקורסיווע אַפּראָוטשיז. גרייטן זיך צו אַרייַן די פאַסאַנייטינג מעלוכע פון רעקורסיאָן און אָבסערווירן זייַן מערקווירדיק פיייקייט אין סאַלווינג קאָמפּליצירט ישוז.
וואָס פּונקט זענען רעקורסיאָנס?
אין יקערדיק ווערטער, רעקורסיאָן איז אַ שטאַרק פּראָגראַממינג טעכניק וואָס כולל אַ פֿונקציע וואָס רופט זיך בעשאַס דורכפירונג. עס איז ווי סטערינג אין אַ שפּיגל און זען אַ בילד אין אַ בילד, ריזאַלטינג אין אַ זיך-רעפערענטשאַל ציקל.
מיר קענען מאַכנ גרויס ישוז ניצן רעקורסיאָן דורך דיוויידינג זיי אין קלענערער, מער מאַנידזשאַבאַל סובפּראָבלעמס.
עס איז ענלעך צו שטעלן צוזאַמען אַ לאָבזעג, ווו איין שטיק לינקס צו אנדערע טיילן צו פּראָדוצירן אַ פול בילד. רעקורסיאָן אַלאַוז אונדז צו סאָלווע ישוז אין אַן עלעגאַנט און עפעקטיוו שטייגער דורך ריפּיטינג די זעלבע גאַנג פון ינסטראַקשאַנז מיט פאַרשידן ינפּוץ.
1-דירעקט רעקורסיאָן
דירעקט רעקורסיאָן איז די מערסט יקערדיק טיפּ פון רעקורסיאָן, אין וואָס אַ פֿונקציע רופט זיך גלייַך. עס ינטיילז דיטיילד אַ פּראָבלעמאַטיק פּראָבלעם אין קלענערער סובפּראָבלעמען ביז אַ באַזע פאַל איז אַטשיווד, וואָס פירט צו טערמאַניישאַן.
די רעקורסיווע פֿונקציע רופט זיך מיט פאַרשידן ינפּוץ, וואָס אַלאַוז די דורכפירונג פון דער זעלביקער גאַנג פון ינסטראַקשאַנז צו זיין ריפּיטיד. יעדער ינוואָקאַטיאָן איז באזירט אויף די פריערדיקע, פּראַגרעסיוולי נאָענט צו די באַזע פאַל וואָס מאכט די רעקורסיאָן צו סוף.
זאל ס טשעק דעם בייַשפּיל.
def countdown(n):
if n <= 0:
return
print(n)
countdown(n - 1)
countdown(5)
אָוטפּוט:
5
4
3
2
1
2-ינדירעקט רעקורסיאָן
ומדירעקט רעקורסיאָן מוסיף אַן ינטריגינג טוויסט צו די רעקורסיווע דרך. אין קאַנטראַסט צו דירעקט רעקורסיאָן, וואָס ינוואַלווז אַ פֿונקציע בפירוש רופן זיך, ומדירעקט רעקורסיאָן כולל אַ קייט פון פֿונקציע רופט.
איין פונקציע רופט אן אנדערן, וואס קען דאן רופן די אריגינעלע פונקציע אדער סיי וועלכע אנדערע פונקציע וואס גייט ענדליך צוריק צום אריגינעל. דעם ינטערקאַנעקטיד וועב פון פאַנגקשאַנז קאַללס טראגט אַ ענטראַלינג טאַנצן אין וואָס עטלעכע פאַנגקשאַנז מיטאַרבעטן צו פאַרריכטן אַ פּראָבלעם.
בייַשפּיל:
def function_A(n):
if n > 0:
print("A:", n)
function_B(n - 1)
def function_B(n):
if n > 0:
print("B:", n)
function_A(n - 1)
function_A(3)
אָוטפּוט:
A: 3
B: 2
A: 1
3-לינעאַר רעקורסיאָן
באַטראַכטן אַ רייזע אַראָפּ אַ גלייַך מאַרשרוט, איין שריט אין אַ צייַט, ביז איר אָנקומען צו דיין אָביעקטיוו. דעם סאַקווענטשאַל טעכניק איז ימבאַדיד דורך לינעאַר רעקורסיאָן, אין וואָס אַ פֿונקציע פּערפאָרמז אַ איין רעקורסיווע רופן אין יעדער פונקציע יטעראַטיאָן.
מיט יעדער רעקורסיווע רופן, די רעקורסיווע פּראָצעס באוועגט נעענטער צו אַ באַזע פאַל דורך לאָוערינג די אַרויסגעבן גרייס. עס גייט אויף אַ קלאָר און לינעאַר שטייגער, סאַלווינג סובפּראָבלעמס איינער אין אַ צייַט ביז די לעצט ענטפער איז ריטשט.
בייַשפּיל:
def factorial(n):
if n == 0:
return 1
return n * factorial(n - 1)
result = factorial(5)
print(result)
אָוטפּוט:
120
4-טרי רעקורסיאָן
ווען אַ פֿונקציע צווייגן אין עטלעכע רעקורסיווע רופט, מיר אַרייַן די וועלט פון בוים רעקורסיאָן. א פֿונקציע אין בוים רעקורסיאָן דזשענערייץ פילע רעקורסיווע רופט, יעדער פון וואָס סאַלווז אַ באַזונדער סובפּראָבלעם, פּונקט ווי די צווייגן פון אַ בוים טאָן.
די בראַנטשינג סטרוקטור אַלאַוז די סיימאַלטייניאַס ויספאָרשונג פון עטלעכע רוץ, יפעקטיוולי ברייקינג אַראָפּ קאָמפּליצירט ישוז אין קלענערער, ינטעררילייטיד קאַמפּאָונאַנץ.
בייַשפּיל:
def fibonacci(n):
if n <= 1:
return n
return fibonacci(n - 1) + fibonacci(n - 2)
result = fibonacci(6)
print(result)
אָוטפּוט:
8
5-נעסטעד רעקורסיאָן
נעסטעד רעקורסיאָן מוסיף אַ יקסייטינג גראַד פון קאַמפּלעקסיטי צו די רעקורסיווע אַלוועלט. אין דעם פאָרעם פון רעקורסיאָן, אַ פֿונקציע ינקאָרפּערייץ אַ רעקורסיווע רופן ווי אַן אַרגומענט אין אן אנדער רעקורסיווע רופן.
די ינער רעקורסיווע רופן אקטן אויף אַ ווערט וואָס איז אָפענגיק אויף די ויסווייניקסט רעקורסיווע רופן. די קאַמפּלעקסיטי וואקסט מיט יעדער נעסטעד ינוואַקיישאַן, קאַלמאַנייטינג אין אַ ינטריגינג מוסטער פון נעסטעד רעקורסיווע רופט.
בייַשפּיל:
def nested_recursion(n):
if n > 100:
return n - 10
return nested_recursion(nested_recursion(n + 11))
result = nested_recursion(95)
print(result)
רעזולטאַט:
91
6-עק רעקורסיאָן
עק רעקורסיאָן איז אַן אַפּטאַמאַזיישאַן טעכניק פֿאַר רעקורסיווע אַלגערידאַמז וואָס קענען פֿאַרבעסערן זייער פאָרשטעלונג. די רעקורסיווע רופן אויס ווי די לעצט קאַמף פון אַ פֿונקציע מיט עק רעקורסיאָן, מאכן.
ווייַל עס זענען קיין בוילעט אַפּעריישאַנז נאָך די רעקורסיווע רופן, דער קאַמפּיילער אָדער יבערזעצער קענען פאַרפּאָשעטערן די רעקורסיאָן דורך ריפּלייסינג עס מיט אַ פּשוט שפּרינגען.
דעם אַפּטאַמאַזיישאַן צוגאַנג, באקאנט ווי עק רופן אַפּטאַמאַזיישאַן, ראַדוסאַז די פאָדערונג פֿאַר יעדער רעקורסיווע רופן צו ריטיין אַ אָנלייגן ראַם, ריזאַלטינג אין ענכאַנסט גיכקייַט און נידעריקער זיקאָרן נוצן.
בייַשפּיל:
def tail_factorial(n, result=1):
if n == 0:
return result
return tail_factorial(n - 1, result * n)
result = tail_factorial(5)
print(result)
אַרויס:
120
7-ניט-עק רעקורסיאָן
אין קאַנטראַסט צו עק רעקורסיאָן, ניט-עק רעקורסיאָן ינוואַלווז עקסטרע אַקטיוויטעטן געטאן נאָך די רעקורסיווע רופן אין אַ פֿונקציע. איידער קיין מער אַקשאַנז קען זיין געטאן, יעדער רעקורסיווע רופן מוזן פאַרענדיקן און צוריקקומען.
ווי אַ קאַנסאַקוואַנס, ביז די באַזע פאַל איז ריטשט און די רעקורסיאָן ענדס, אַ אָנלייגן פון בוילעט אַפּעריישאַנז איז מיינטיינד. ניט-עק רעקורסיאָן אָפט ניצט מער זכּרון און איז ווייניקער עפעקטיוו ווי עק רעקורסיאָן, אָבער עס איז נאָך אַ נוציק געצייַג פֿאַר טאַקלינג אַ פאַרשיידנקייַט פון ישוז.
בייַשפּיל:
def non_tail_sum(n):
if n == 0:
return 0
return n + non_tail_sum(n - 1)
result = non_tail_sum(5)
print(result)
אָוטפּוט:
15
נעם צוזאם
רעקורסיאָן איז אַ ינטריגינג באַגריף אין פּראָגראַממינג. עס אַלאַוז אונדז צו מאַכנ קאָמפּליצירט פּראָבלעמס אין אַ רעקורסיווע, זיך-רעפערענטשאַל שטייגער.
עס אָפפערס אַ בוילעט אופֿן פון טראכטן וועגן און סאַלווינג פּראָבלעמס, ברייקינג זיי אַראָפּ אין קלענערער, מער מאַנידזשאַבאַל טשאַנגקס. ווען ארבעטן מיט רעקורסיאָן, אָבער, עס איז קריטיש צו נוצן ופמערקזאַמקייט צו עטלעכע פונקטן.
איר זאָל ידענטיפיצירן פּאַסיק באַזע קאַסעס וואָס לאָזן די רעקורסיאָן צו סוף. אויב זיי זענען נישט פאָרשטעלן, די פֿונקציע קען פאָרזעצן צו רופן זיך אויף אייביק.
צווייטנס, באזירט אויף דעם סצענאַר אין האַנט, סעלעקטינג די צונעמען טיפּ פון רעקורסיאָן קענען פירן צו מער עפעקטיוו און עלעגאַנט סאַלושאַנז. פּרוּווט צו געפֿינען וואָס אַרבעט בעסטער פֿאַר די פּראָבלעם אין דער האַנט. ווען ארבעטן מיט וואַסט רעקורסיאָן טיפענישן, זיין אַווער פון פּאָטענציעל דיינדזשערז אַזאַ ווי אָנלייגן אָוווערפלאָו.
לאָזן אַ ענטפֿערן