עבור לתוכן

פרוצדורה רקורסיבית... קשה!

Featured Replies

פורסם

אוקיי יש לי שאלה ששברתי עליה את הראש ולא הצלחתי! ???

צריך לבנות פרוצדורה רקורסיבית שתקבל מספר שלם N, ותדפיס את כל המחלקים שלו. מישהו יכול לעזור? עדיף בפסקל כי אני לא יודע כל כך טוב C... אבל אם אין ברירה אז ב C.. :-\

פורסם

אתה רוצה את כל המחולקים הראשוניים שלו (פרוק לגורמים) או את כל המחולקים שלו

לדוגמא עבור 24 אתה רוצה לקבל

2 2 2 3

או

1 2 3 4 6 8 12 24

?

פורסם
  • מחבר

אתה רוצה את כל המחולקים הראשוניים שלו (פרוק לגורמים) או את כל המחולקים שלו

לדוגמא עבור 24 אתה רוצה לקבל

2 2 2 3

או

1 2 3 4 6 8 12 24

?

אני צריך את כל המחלקים שלו. (את האפשרות השנייה שהבאת):

1 2 3 4 6 8 12 24

פורסם

אז רקוריסה ממש מיותרת פה

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

בהתחלה תקרא לה עם מונה = 1 וכל קריאה רקורסיבית תגדיל את המונה ב-1 עד שתגיע למספר

בכל קריאה תבדוק אם המספר מתחלק במונה ותדפיס בהתאם

זה לא ממש קשה

פורסם

נכון, זו הדרך הכי פשוטה אבל...

אתה לא עונה לשאלתו. ייתכן וזה שעורי בית על רקורסיה והוא צריך לעשות את זה ברקורסיה בכדי לתרגל את זה.

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

אתה כבר תבין מה עשיתי שם.

*** עריכה ***

קבל

לפרוצדורה אתה קורא ע"י

Bla(N,1)

1 הוא המחלק הראשון של הפרוצדורה.

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


Procedure Bla (N:integer;I:integer)
var strDividers:String*256
begin
  if (N mod I)=0 and (N>=I) then
   begin
    strDividers = strDividers & I
    I = I + 1
    Bla N, I
   End
  Elseif (N mod I)<>0 and (N>=I) then
   Begin
    I = I + 1
    Bla N, I
   End
  End if

Writeln strDividers

End
End Procedure

פורסם

הפתרון שלי:

זימון הפרוצדורה גם כן מתבצע ע"י:

Bla(N,1)

הפרוצדורה:


procedure bla (n,x: integer);
begin
     if (n mod x)=0 then
        writeln (x);
     if x<=(n div 2) then
        bla (n,x+1)
     else
         writeln (n);
end;

פורסם

מצויין, זה גם עובד.

מסקנה צביקה:

עם קצת רצון וגם יכולת גם עני יקנה DVD במכולת :xyxthumbs:.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים