עבור לתוכן

צריך עזרה בכתיבת פונקציה רקורסיבית

Featured Replies

פורסם

אני צריך לכתוב פונקצייה רקורסיבית שמקבלת כקלט מחרוזת ותו, ומחזירה את המיקום אחרון של התו, אם התו לא מופיע היא מחזירה 0

אין להשתמש במשתני עזר או בפונקציות נוספות.

זה פשוט מתסכל, אני יושב שעות על פונקציה ולא מצליח....

הנה מה שכתבתי (לא עובד כמו שצריך, פשוט קשה לי יותר מידי לחשוב רקורסיבית :()

במקרה הזה הפונקציה אמורה להחזיר 4.

//אני יודע שזה לא עובד זה מה שאני כתבתי, ואין לי מושג איך לכתוב את הפונקציה הנכונה...

#include <iostream.h>

int lastPosition(char str[], char letter);

void main (void)

{

char str[20]="abaafg";

cout<<lastPosition(str,'a');

cout<<endl;

}

int lastPosition(char str[], char letter)

{

//תנאי עצירה, כשגודל המחזרוזת 0 אז הוא מחזיר 0, משום מה זה נשבר פה....(הקוד ישר)

if (str[0] == NULL)

return 0;

else

{

//הפונקציה מקבלת מחרוזת מקוצרת, (מיקום אחד אחרי) ואת התו שצריך לחפש (מה שבתוך האינדקס)

if (str[lastPosition(str+1,letter)] == letter)

{

letter=0;

return letter+1;

}

else return 0;

}

}

תודה מראש לעוזרים, ואשמח להסבר קצר בנוסף....

RK

פורסם

מה ההודעת שגיאה שאתה מקבל

והיה עוזר עם היית רושם הערות למרות שהתוכנית קצרה

פורסם

אם היה לך את זה בפסקל אז הייתי יכול לעזור....

פורסם
  • מחבר

אבל זה לא בפסקל... אז למה אתה מגיב סתם...

burton, ערכתי את זה והוספתי כמה הערות, מקווה שזה יעזור....

פורסם

int lastPosition(char str[], char letter);

if (*str == NULL) return 0;

if (*str == letter) return 1 + lastPosition(str+1, char letter); }

return 0;

}

אין לי כוח בדוק אבל זה כמעט בטוח נכון

עריכה - שינוי קל

פורסם

כשאתה אומר "פה הוא נעצר" אתה בדקת את זה עם דיבגר וזה מגיע לשם בפעם הראשונה ועוצר או שזה מגיע למקום הזה בפעם ה LEN ואז זה נעצר??

יש לי הרגשה(אני לא בטוח אני צריך להעמיק יותר) אבל ניראה לי שפשוט הפונקציה גומרת לקצר את המחרוזת עד הסוף ואז מפסיקה פשוט כמו שהיא אומרה לעשות

פורסם
  • מחבר

holy, זה לא עובד

burton, אני לא הצלחתי להסתדר עם הדיבגר, הוא פשוט מבלבל אותי,

אבל משום מה הוא מחזיר את הערך האסקי של האות (כמו ששל הולי מחזיר),

אני שובר את הראש ולא מצליח...

פורסם

int lastPosition(char str[], char letter) {

int temp;

if (*str == NULL) return 0;

temp = lastPosition(str+1,letter);

if (*str == letter || temp != 0) return temp + 1;

return 0;

}

עובד

פורסם
  • מחבר

תודה, הולי

נראה לי שהבנתי את זה סוף סוף, (אני מקווה).

רק שיניתי את זה קצת, והוספתי הערות

//Returns the last location of a char

int lastPosition(char str[], char letter)

{

//temp var that counts the location

int Location;

//if the string is empty it return 0

if (str[0] == NULL)

return 0;

//location gets the larger string and the tempoary location of

//the letter

Location = lastPosition (str+1, letter);

//if temp>0 or the string position value is equal the the

//letter its adding 1 to the temp var

if (str[0] == letter || Location > 0 )

return Location + 1;

//if the letter is not exist it returns 0

else return 0;

}

פורסם

אוקיי

יש פה רק נקודה אחת עדינה שצריך לשים לב אליה

מה קורה כשהגעת למקום השמאלי ביותר בה מופיעה האות

במקרה הזה temp=0 כי זה המקום השמאלי ביותר שבה נמצא האות - כולמר היא לא מופיעה בהמשך

במקרה הזה אתה רוצה להחזיר 1, וכאן נכנס בקיצור דרך. temp = 0 ולכן אפשר להחזיר temp + 1 שזה בעצם 1.

זה הדבר היחיד המתוחכם פה, כל השאר זה סתם חלוקה למקרים.

ארכיון

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

דיונים חדשים