פרוצדורה רקורסיבית... קשה! - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


tsvika

Recommended Posts

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

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

קישור לתוכן
שתף באתרים אחרים

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

לדוגמא עבור 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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...