נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: רקורסיה

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
ניצן
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 11 January 2010 בשעה 10:59 | IP רשוּם
ציטוט ניצן

היי ,

קיבלנו תרגיל ברקורסיה שאני שובר את הראש עליו כבר כמה ימים ולא מוצא פיתרון,

קולטים מהמשתמש קבוצה = סטרינג עם אותיות(אות לא מופיעה פעמים), וצריך ברקורסיה להדפיס למסך את כלל תתי הקבוצות האפשריות של אותה הקבוצה.

יש לי רעיון כלשהו, אבל יש לי בעיה עם התנאי עצירה של הרקורסיה.

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

אשמח אם מישהו יוכל לתת לי כיוון...

תודה מראש

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 11 January 2010 בשעה 15:15 | IP רשוּם
ציטוט ניר

הכיוון שלך נכון.
כיוון אפשרי למחשבה - מערך עזר שעובר בין הקריאות הרקורסיביות השונות. תנאי עצירה כאשר מגיעים לסוף המערך



__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
ניצן
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 January 2010 בשעה 00:32 | IP רשוּם
ציטוט ניצן

תוכל לפרט מעט יותר?

הסתבכתי עם הכתיבה, הגעתי לקוד ממש מסובך, שעובד רק לקבוצה של 3 אותיות.. 

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 12 January 2010 בשעה 14:14 | IP רשוּם
ציטוט ניר

מדובר על שפת C או שפה אחרת? הרעיון ישתנה קצת בהתאם לשפה

__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 
ניצן
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 January 2010 בשעה 22:35 | IP רשוּם
ציטוט ניצן

מדובר על c++..

 

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

#include <iostream.h>
#include <stdlib.h>
#include <string.h>

#define SIZE 7

void find_subsets (char set[] , int size, int cell)
{
int i, counter;
char new_set [] = "";

//stop
if (cell<0)
{
 cout<<set<<endl;
 
 return;
}

//cout<<"set  "<<set<<"  size  "<<size<<"  cell  "<<cell<<endl;
for (i=0;i<cell;i++)
{
 new_set =set ;
}
new_set[cell]='\0';

//cout<<"->"<<endl;
cell--;
find_subsets (new_set ,size, cell);

find_subsets (set ,size,cell);

}


void main()
{

int size,cell;

char set [SIZE] = {0};


cout<<"Please enter the elements:"<<endl;
cin>>set;
 
size=strlen (set);

cell=size-1;
cout<<"set  "<<set<<"  size  "<<size<<"  cell  "<<cell<<endl;
cout<<"the output is:"<<endl;

find_subsets (set , size, cell);
}

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 12 January 2010 בשעה 22:59 | IP רשוּם
ציטוט ניצן

שתי השורות האלה הן רק לצורך בדיקה, שכחתי למחוק

 

cout<<"->"<<endl;

cout<<"set  "<<set<<"  size  "<<size<<"  cell  "<<cell<<endl;

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

הצטרף / הצטרפה: 12 January 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 3296
נשלח בתאריך: 21 January 2010 בשעה 12:09 | IP רשוּם
ציטוט ניר

קוד:

#include <iostream>
#include <cstring>
using namespace std;

void print_substrings(char *s, int len, int current, char* bits)
{
    if (current == len)
    {
        for (int i = 0; i < len; ++i)
            if (bits == 1) cout << s;
        cout << endl;

        return;
    }

    bits[current] = 1;
    print_substrings(s, len, current+1, bits);

    bits[current] = 0;
    print_substrings(s, len, current+1, bits);

}

void print_substrings(char *s)
{
    // calculate string length
    int len = strlen(s);

    // create help array and fill it with zeros
    char *bits_array = new char[len];
    for (int i = 0; i < len; bits_array[i++]=0);

    // call recursion
    print_substrings(s, len, 0, bits_array);

    // free temporary memory
    delete[] bits_array;
}

int main()
{
    char* s = "abcd";
    print_substrings(s);
    return 0;
}



__________________
מספר האייסיקיו שלי ו/או כתובת ה-MSN שלי אינם מהווים מוקד תמיכה
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

קפיצה לפורום
אינך יכול/ה לשלוח נושאים חדשים בפורום זה
אינך יכול/ה להגיב לנושאים בפורום זה
אינך יכול/ה למחוק את הודעותיך ותגוביך בפורום זה
אינך יכול/ה לערוך את הודעותיך ותגובותיך בפורום זה
אינך יכול/ה לצור סקרים בפורום זה
אינך יכול/ה להצביע בסקרים בפורום זה