לעולם אין לזלזל בצורך לחזור על הקוד בחיפוש אחר פתרונות לכמה מהבעיות הגדולות בעולם. מה שאתה צריך לדעת הוא שבתכנות, חזרה לובשת אחת משתי צורות - איטרציה או רקורסיה.

המטרה כאן היא להציג בפניכם חזרה בקוד ולהדגים כיצד ניתן להשתמש בה לשיפור תוכניות ה- Java שלכם.

תוכניות חוזרות יכולות לעזור לך לפתור כמה מבעיות התכנות הקשות ביותר. הנה מה שאתה צריך לדעת כדי ליצור תוכניות רקורסיביות ב- Java.

באמצעות איטרציה

איטרציה משתמשת במבנה לולאה כדי לחזור על קוד. שלושת הסוגים של מבנים איטרטיביים הם לולאה לפני הבדיקה (תוך), לולאה לאחר הבדיקה (לעשות בזמן), ו- לולאה נשלטת נגד (עבור).

מבנים איטרטיביים אלה פועלים על ידי חזרה על גוש קוד בזמן שנשאר מצב מסוים נכון, אך ברגע שמצב זה הופך לשקר הלולאה נעצרת והתוכנית חוזרת לקדמותה זְרִימָה.

לדוגמה, נוכל להשתמש באחד המבנים האיטרטיביים כדי לפתור את בעיית סכום כל המספרים השלמים מ -1 עד n. בהתאם למבנה האיטרטיבי שבו משתמשים הפתרון יקבל צורה ספציפית, אך כל אחד מהם שלושת המבנים האיטרטיביים יכולים לתת מענה לבעיה זו באמצעות הדברים הבאים פסאודוקוד.

דוגמא לפסאוקוד איטרציה


הַתחָלָה
instagram viewer

דחה סכום, ספר כמספר שלם
סכום = 0
ספירה = 1
חזור
סכום = סכום + ספירה
ספירה = ספירה + 1
עד לספירה> n
סוֹף

לפסאוד קוד לעיל יש שני משתנים, סכום וספירה, אשר מאותחל ל 0 ו- 1 בהתאמה. המשתנה "ספירה" מאותחל ל -1 מכיוון שהבעיה שאנו מנסים לפתור קובעת כי אנו זקוקים לסכום כל המספרים השלמים מ -1 עד n.

למשתנה "n" יוקצה מספר אקראי מהמשתמש ומשתנה "ספירה" יגדל באחד כל אחד זמן ביצוע לולאה, אך ברגע שערך המשתנה "ספירה" עולה על ערך זה של "n", תפסיק.

מדוע להשתמש ברקורסיה?

אם היינו בוחנים את העובדות סביב איטרציה ורקורסיה, נמצא כמה דברים אמיתיים.

  • שתי השיטות כוללות חזרה.
  • שתי השיטות דורשות מצב בדיקה, שיצביע מתי להפסיק.
  • שתי השיטות יכולות לבצע באופן תיאורטי לנצח אם לא ניתן או מתקיים תנאי יציאה.
  • כל בעיה שניתן לפתור באמצעות איטרציה יכולה להיפתר גם באמצעות רקורסיה ולהיפך.

אז למה שנרצה לבחור שיטה אחת על פני השנייה? התשובה הפשוטה היא יעילות. עם רקורסיה, מתכנת יכול להשתמש בפחות קוד בכדי להשיג את אותה תוצאה למעשה. פחות קוד פירושו שיש ירידה משמעותית באפשרות של טעויות שלא יבחינו בהן.

רקורסיה משתמשת בזיכרון רב יותר והיא איטית יותר מאיטרציה, אך יש לה ערימה מובנית (מבנה נתונים). עם איטרציה יהיה עליכם לבנות מבנה נתונים (למעשה להמציא את הגלגל מחדש), ולהשאיר את התוכנית פתוחה לאפשרות גדולה יותר של טעויות שלא נתפסו עקב הקוד הנוסף.

קָשׁוּר: חריגים מג'אווה: האם אתה מטפל בהם נכון?

איך עובד רקורסיה

רקורסיה היא השם שניתן לתהליך שבו פונקציה קוראת לעצמה שוב ושוב עד שהתנאי הספציפי מתקיים. שיטה חוזרת זו פותרת בעיות על ידי פירוק גרסאות קטנות ופשוטות יותר של עצמן.

כל פונקציה רקורסיבית מורכבת משני חלקים - מקרה בסיס ומקרה כללי.

מבנה בסיסי של דוגמה לפונקציה רקורסיבית


פוּנקצִיָה(){
//מקרה יסוד
// מקרה כללי
}

מקרה הבסיס הוא החלק של הפונקציה הרקורסיבית הפותר את הבעיה. לכן, בכל פעם שהפונקציה הרקורסיבית מגיעה למקרה הבסיס התוכנית יוצאת מהפונקציה הרקורסיבית וממשיכה בזרימה הטבעית שלה.

המקרה הכללי הוא החלק של הפונקציה הרקורסיבית החוזרת על עצמה. זה המקום שבו הפונקציה מכנה את עצמה ואיפה מתבצעת עיקר העבודה.

שימוש ב- Recursion בג'אווה

שפות תכנות מסוימות תומכות רק באיטרציה, בעוד שאחרות תומכות רק ברקורסיה. למרבה המזל, ג'אווה היא אחת השפות התומכות בשתי השיטות החוזרות על עצמן.

ב- Java נעשה שימוש ברקורסיה באותו אופן שבו משתמשים בו בכל שפה אחרת שתומכת בו. המפתח הוא להבטיח תמיד שלפונקציה הרקורסיבית שלך יש בסיס וגם מקרה כללי, לפי הסדר הזה.

נחזור לדוגמת הסיכום הראשונית שלנו, המטרה היא למצוא את סכום כל המספרים השלמים מ -1 עד n, כאשר n הוא מספר שלם המסופק על ידי המשתמש.

דוגמה ל- Java Recursion


// פונקציה רקורסיבית
int סכום (int n) {
//מקרה יסוד
אם (n <= 1) {
להחזיר 1;
}
// מקרה כללי
אַחֵר{
החזר n + סכום (n-1);
}
}

הפונקציה הרקורסיבית לעיל לוקחת מספר שלם "n" ומסיימת את ביצועה רק כאשר הערך של n קטן או שווה ל -1.

אם היינו מעבירים את המספר השלם 5 לתוכנית שלמעלה, המשתנה "n" היה מניח את הערך 5. הערך של "n" ייבדק במקרה המקרה הבסיסי, אך בהתחשב בכך ש -5 גדול מ- 1 "n" יועבר כעת למקרה הכללי.

בדוגמה זו, המקרה הכללי יקרא לפונקציה הרקורסיבית ארבע פעמים. בשיחת הפונקציה הסופית הערך של "n" יהיה 1, כך שיעמוד בדרישות המקרה הבסיסי וכתוצאה מכך הפונקציה הרקורסיבית תסתיים ותחזיר 15.

אם נשנה את הערך של "n" ל- 7, הפונקציה הרקורסיבית תקרא לעצמה שש פעמים ותחזיר 28 לפני שתסיים את הביצוע שלה.

רוצה לנסות את זה בעצמך? באפשרותך לבצע את התוכנית הרקורסיבית לעיל באמצעות שורת הקוד הבאה בפונקציה הראשית של תוכנית ה- Java שלך.


System.out.println (סכום (7));

מה שלמדת

אם עשית את זה דרך כל המאמר הזה יש לך הבנה בסיסית בשתי השיטות החוזרות ונשנות המשמשות בתכנות. כעת אתה מזהה את הדמיון בין איטרציה לרקורסיה ומדוע מפתח יבחר להשתמש ברקורסיה על פני איטרציה, וכיצד להשתמש בפונקציה רקורסיבית בג'אווה.

אשראי תמונה: ThisIsEngineering /פקסלים

אימייל
מהי רקורסיה ואיך משתמשים בה?

למדו את יסודות הרקורסיה, הכלי החיוני אך מעט מכוון את הדעת עבור מתכנתים.

קרא הבא

נושאים קשורים
  • תִכנוּת
  • ג'אווה
על הסופר
קדישא קין (7 מאמרים פורסמו)

Kadeisha Kean הוא מפתח תוכנה מלא סטאק וסופר טכני / טכנולוגי. יש לה יכולת מובהקת לפשט כמה מהמושגים הטכנולוגיים המורכבים ביותר; הפקת חומר שניתן להבין בקלות על ידי כל טירון טכנולוגי. היא נלהבת לכתוב, לפתח תוכנות מעניינות ולנסוע בעולם (באמצעות סרטי תעודה).

עוד מקדאישה קין

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים טכניים, ביקורות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

צעד אחד נוסף !!!

אנא אשר את כתובת הדוא"ל שלך בדוא"ל ששלחנו לך זה עתה.

.