29-10-2015, 07:04
|
|
מנהל משבראש, בלשנות, תכנות ויהדות
|
|
חבר מתאריך: 04.06.06
הודעות: 33,130
|
|
|
כדי להדפיס את אפשרויות העלייה, מבחינה רעיונית נסדר אותם באופן הבא:
[דוגמא עבור n=4]
ניתן להבחין שבכל פעם שאנו מורידים מהמספר צעד i כלשהו, האפשרויות הנותרות הן הצעדים עבור n-i מדרגות.
לדוגמא ל־1 מחוברים בדיוק האופציות שציינת בעצמך עבור 3.
פה נכנסת הרקורסיה.
אם נשתמש במחרוזת בשביל הצעדים, נוכל להגיע לאלגורית׳ם הבא (בפסאודוקוד):
קוד PHP:
function steps( n, s ):
if n == 0:
print s
for i from 1 to n do:
steps( n-i, s + '+' + i )
מכיוון שאתה רוצה גם מגבלה על גודל הצעד, אפשר פשוט להכניס אותה לתנאי העצירה של הלולאה:
קוד PHP:
function steps( n, max, s ):
if n == 0:
print s
for i from 1 to min( n, max ) do:
steps( n-i, max, s + '+' + i )
הערה: לא טרחתי לטפל בסימן הפלוס המוביל, כי זה סתם יסרבל, ובכל אופן הוא מופיע גם אצלך..
אם נממש את הקוד, אז לדוגמא עבור הקריאה steps( 4, 2, '' ) תודפסנה האפשרויות:+1+1+1+1
+1+1+2
+1+2+1
+2+1+1
+2+2
הערה 2: אפשר גם ליצור פונקציה עוטפת שלא תדרוש את ארגומנט המחרוזת, ושתקרא ל־steps עם מחרוזת ריקה
או לחלופין אפשר להגדיר ל־s ערך ברירת מחדל, כך שיהיה ניתן לקרוא לפונקציה בלעדיו
תלוי בשפה שבה משתמשים.
נערך לאחרונה ע"י ShoobyD בתאריך 29-10-2015 בשעה 07:07.
|