לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 06-08-2005, 21:22
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
ריקורסיה היא הגדרת פונקציה דרך אותה פונקציה עצמה.
בתגובה להודעה מספר 1 שנכתבה על ידי SnaCk שמתחילה ב "רקורסיה"

לדוגמה: ההגדרה של פעולת העצרת("עצרת-N") היא N כפול העצרת של המספר
הקטן באחד מ-N, כלומר N*עצרת(N-1). פה הגדרנו את המשמעות של פעולת
העצרת ע"י פעולת העצרת עצמה.
בכל ריקורסיה מועילה חייבים להיות תנאי עצירה או תנאי קצה. במקרה על עצרת
מוגדר כי עצרת(1)=1, לכן אם נרצה לחשב את העצרת של 5, נחשב 5*עצרת-4.
עצרת-4 שווה ל-4*עצרת-3 וכך הלאה:
5! = 5*4! = 5*4*3! = 5*4*3*2! = 5*4*3*2*1! = 5*4*3*2*1 = 120
אם תרצה לתרגם את זה ל-C, זה יראה בערך כך:
קוד PHP:
 int factorial(int N)
   {
      if ((
N==1)||(N==0))
      {
          return 
1;
      }
      else
      {
          return (
N*factorial(N-1));
      }
   } 

הוספתי את הכלל שאומר שעצרת של 0 היא גם 1. שים לב שישנו פגם
בפונקציה: היא תפעל בצורה שגויה עבור מספרים שליליים, והשימוש
שלה ב-int עבור מכפלת של int-ים רבים עלול לגרום לשגיאת גלישה.
אבל אלה הן בעיות טכניות ולא משהו עקרוני לעניין הריקורסיה. את הבעיה
הראשונה, נפתור כך לדוגמה:
קוד PHP:
 int factorial(int N)
    {
       if ((
N==1)||(N==0))
       {
           return 
1;
       }
       else if (
N<0)
       {
           return (-
1);
       }
       else
       {
           return (
N*factorial(N-1));
       }
    } 

אם הפרמטר שמקבלת הפונקציה הוא מספר שלילי, הפונקציה מחזירה
(-1), שבמקרה שלנו מוגדר כקוד שגיאה עבור פרמטר שלילי. (שים לב
שזה אפשרי רק כי הערך המוחזר של העצרת חייב להיות חיובי, ולכן ניתן
להשתמש בערכים שליליים כקודי שגיאה)
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 07-08-2005, 15:29
  AlexKarpman AlexKarpman אינו מחובר  
 
חבר מתאריך: 20.12.01
הודעות: 20,962
הבנתי למה אתה מתכוון למרות החירבוש :)
בתגובה להודעה מספר 10 שנכתבה על ידי bazooka joe שמתחילה ב "אמת ויציב..."

הסיבה היא כפולה ופשוטה: זה יוצר אחידות בקוד - כל בלוק נמצא
בסוגריים מסולסלים; ובמידה ואני אחליט לשנות את הקוד אי-פעם
למספר שורות לא יהיה צורך לעשות כל שינוי בקוד.
עקרון בסיסי של תכנות קובע שאם בין שתי שורות קוד אין קשר
לוגי - אין סיבה(ולכן לא אמור) שתהיה ביניהן תלות.
הכלל הזה אינו חל על המהדר והאופטימייזר שיוצרים תלויות כאלה
בכוונה - אבל הוא בהחלט תקף ברמת הקוד. באופן דומה ניתן
לומר שאין סיבה שאם אני מוסיף פעולה לחלק ה-statements של
בלוק if שאני אצטרך לשנות סוגריים כאלה או אחרים פה או שם...
C(ולכן גם CPP) מאפשרת לכתוב קוד דפוק - זה לא אומר שאני
חייב לכתוב אותו...
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 08:43

הדף נוצר ב 0.07 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר