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

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


rk666

Recommended Posts

אני צריך לכתוב פונקצייה רקורסיבית שמקבלת כקלט מחרוזת ותו, ומחזירה את המיקום אחרון של התו, אם התו לא מופיע היא מחזירה 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

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

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, אני לא הצלחתי להסתדר עם הדיבגר, הוא פשוט מבלבל אותי,

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

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

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

תודה, הולי

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

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

//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.

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

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

ארכיון

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

×
  • צור חדש...