ההבדל בין רקורסיה לאיטרציה

מְחַבֵּר: Laura McKinney
תאריך הבריאה: 1 אַפּרִיל 2021
תאריך עדכון: 4 מאי 2024
Anonim
difference between recursion and iteration
וִידֵאוֹ: difference between recursion and iteration

תוֹכֶן


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

  1. טבלת השוואה
  2. הגדרה
  3. הבדלים עיקריים
  4. סיכום

טבלת השוואה

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


הגדרת רקורסיה

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

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

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

int factorial (int num) {תשובה int; אם (num == 1) {return 1; } else {answer = factorial (num-1) * num; // שיחה רקורסיבית} חזרה (תשובה); }

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


הגדרת איטרציה

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

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

בואו נבין איטרציה לגבי הדוגמא שלעיל.

int factorial (int num) {תשובה int = 1; // זקוק לאתחול מכיוון שהוא עשוי להכיל ערך זבל לפני האתחול שלו ל (int t = 1; t> num; t ++) // איטרציה {answer = answer * (t); להחזיר (תשובה); }}

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

  1. רקורסיה היא כאשר שיטה בתוכנית קוראת לעצמה שוב ושוב ואילו איטרציה היא כאשר קבוצת הוראות בתוכנית מבוצעת שוב ושוב.
  2. שיטה רקורסיבית מכילה מערכת הוראות, הצהרה קוראת לעצמה ותנאי סיום ואילו הצהרות איטרציה כוללות אתחול, תוספת, תנאי, מערכת הוראות בתוך לולאה ומשתנה שליטה.
  3. הצהרה על תנאי מחליטה את סיום החזרה והערך של משתנה הבקרה מחליט על סיום הצהרת האיטרציה.
  4. אם השיטה אינה מביאה למצב הסיום היא נכנסת לחזרתיות אינסופית. מצד שני, אם משתנה הבקרה לעולם לא מוביל לערך הסיום, הצהרת האיטרציה חוזרת לאין סוף.
  5. רקורסיה אינסופית עלולה להוביל לקריסת מערכות ואילו איטרציה אינסופית צורכת מחזורי מעבד.
  6. רקורסיה מיושמת תמיד בשיטה ואילו איטרציה מוחלת על סט ההוראה.
  7. משתנים שנוצרו במהלך השחזור מאוחסנים בערימה ואילו איטרציה אינה דורשת ערימה.
  8. החזרתיות גורמת לקורה של שיחות פונקציות חוזרות ואילו לאיטרציה אין פונקציה הקוראת תקורה.
  9. בגלל פונקציה הקריאה התקורה של התקיפה היא איטית יותר ואילו ביצוע האיטרציה מהיר יותר.
  10. רקורסיה מקטינה את גודל הקוד ואילו איטרציות גורמות לקוד להיות ארוך יותר.

סיכום:

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