07/05/2005 16:07:44
Analyst
שלום לכולם , אני מנסה להבין תקטע קוד הזה אך איני מצליח, האם מישהו יכול להסביר לי תקוד בצורה פשוטה ?? , ותודה
#include <conio.h> #include <stdio.h>
long factorial (int n) { if (n > 0) return (n * factorial (n-1)); else return 1; } void main() { int n = 5; printf ("The factorial of %d is: %ld", n, factorial(n)); }
ולמה התוצאה שהוא מחזיר לי זה 150 ?
08/05/2005 01:13:12
ziv
זה שמו... רקורסיה... הרעיון המגניב הוא שהוא קורא לעצמו וכל פעם שהוא עושה return (n*factorial(n-1) הוא קורא לעצמו עד שמספר 1 קורא שוב ואז הוא קורא לאפס וזה עושה return 0 ואז כולם חוזרים אחורה אחורה אחורה אחורה אחורה אחורה אחורה אחורה אחורה (ספאם טוב) עד שמגיעים להתחלה וזהו יש תשובה שהיא אגב לא 150 אלא 120.[ההודעה נערכה על-ידי ziv ב-08/05/2005 01:14:30]
08/05/2005 03:17:12
Analyst
אה יפה אהבתי אבל תאמת לא הבנתי. :-\
08/05/2005 17:34:13
cp77fk4r
אני מציע לך ללמוד את הנושא "רקורסיה" - זה יעזור לך להבין.
08/05/2005 18:19:54
K4xZ
חח סיפי צודק.. אין דבר כזה לא הבנתי.. תלמד עד שידבקו לך הביצים לספר.
10/05/2005 19:34:21
Analyst
K4xZ טוב שמע אני לא חושב שאתה נולדת Analyzer. אז זה לא כזה מצחיק , אני רק מתחיל לא יותר ואני מבקש ממך או מCP או מאדם מבין אחר שיעזור לי , לפחות שיגיד לי מה זה עצרת בכלל , לא קשור לשפת C. אני רק צריך לדעת מה זה עצרת אז אם מישהו יכול להסביר לי אני יהיה מודה לו מאוד מאוד , ותודה כפרות שלי :)
10/05/2005 21:07:52
cp77fk4r
עצרת (סימן: !), היא פעולה חשבונית, הפעולה היא כפל של כל המספרים לפני N (כולל), לדוגמא: 4! יהיה שווה ל 1*2*3*4 = 24. אבל מה הקשר..?
10/05/2005 21:15:02
Analyst
עזרת לי מאוד , תודה לך אחי.... :)
11/05/2005 00:12:05
Analyst
עכישו אני מתחיל להבין אך את הקוד עצמו קצת מסובך כמולר מה זה יעשה (n * factorial (n-1 נגיד N היה 5 אז זה אמור לעשות 5*1-5 ??
11/05/2005 08:07:05
Analyst
אה עכשיו הבנתי בעזרת ההסבר שלך CP. תודה לך
13/05/2005 11:58:57
CoDeR
זה פותר את זה לפי שלבים... נגיד 5. 5! = 5 * (5-1)! = 5 * 4! 4! = 4 * (4-1)! = 4 * 3! וכך הלאה... עד שבסוף מגיעים ל 5! = 5 * 4 * 3 * 2 * 1
13/05/2005 12:31:40
Analyst
CoDeR , פששש, תותח גדול אחי , כפרה עליך :)
עמודים:
1