הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   רקורסיה שלא עובדת כראוי. (https://hosts.co.il/forums/showthread.php?t=68065)

Derey22 07-10-08 18:34

רקורסיה שלא עובדת כראוי.
 
יש לי את הקוד הבא(מה התוכנית אמורה לעשות זה לא כ"כ משנה).
קוד:

        for (int x=0;x<2;x++)
        {
                for (int y=0;y<2;y++)
                {
                        for (int z=0;z<2;z++)
                        {
                                for (int n=0;n<2;n++)
                                {
                                        cout << x << "," << y << "\n" << z << "," << n << "\n\n";
                                }
                        }       
                }
        }

ניסתי ל"המיר" את הקוד לרקורסיה כדי שאני אבחר כמה לולאות מקוננות יהיו בתוכנית:
זאת התוכנית החדשה שלא עובדת.
קוד:

void FunChe ()
{
        b++;
        if (b <= 4)
        {
                        for (int a=0;a<2;a++)
                        {
                                for (int b=0;b<2;b++)
                                {
                                        cout << b << "," << a << "," <<"\n";
                                        FunChe();

                                }
                        }


        }
}

משם לא הצלחתי להגיע לאותו תוצאה.

תודה לעוזרים.

Jerba 07-10-08 18:41

אממ , אתה מצהיר בכל לולאה על b מחדש, ואתה עוד מעלה אותו (b++) בהתחלת הריקורסיה..קצת מוזר לי..תצהיר עליו בחוץ

Derey22 07-10-08 18:43

ציטוט:

נכתב במקור על ידי Jerba (פרסם 671673)
אממ , אתה מצהיר בכל לולאה על b מחדש, ואתה עוד מעלה אותו (b++) בהתחלת הריקורסיה..קצת מוזר לי..תצהיר עליו בחוץ

זה כנראה חלק מהטעות אבל לא הכול.
קוד:

int b=0;

void FunChe ()
{
        b++;
        if (b <= 4)
        {
                        for (int a=0;a<2;a++)
                        {
                                for (int c=0;c<2;c++)
                                {
                                        cout << a << "," << c << "," <<"\n";
                                        FunChe();

                                }
                        }


        }
}


mayden 07-10-08 20:06

תנסה אם כבר:
PHP קוד:

void FunChe (int b)
{
 if (
<= 4)
    {
            for (
int a=0;a<2;a++)
            {
                for (
int c=0;c<2;c++)
                {
                    
cout << << "," << << "," <<"\n";
                    
FunChe(b++);
 
                }
            }
 
 
    }


משהו כזה.. (הבנת את הכוונה לא?)

Jerba 08-10-08 01:15

תצהיר על המשנה מונה בחוץ , כלומר בתחילת הCLASS..

Derey22 08-10-08 07:28

תודה אפשר לנעול עזרו לי בפורום אחר.

AlmogBaku 09-10-08 18:46

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

Davieh 09-10-08 22:11

סתם הערה, כיום לא נפוץ השימוש בלולאות FOR ברקורסיה, אלה ב WHILE וכדומה, ככה לפחות באוניורסיטאות .. ולרמות קושי ..
כי בעצם הרקורסיה עושה את העבודה של הלולאות FOR לדוגמא רק בילדיהן ...

SDF 09-10-08 23:54

אהלן,
אני רואה שכבר הסתדרת, אבל יחד עם זאת,
אם כל מה שאתה רוצה זה להדפיס מספרים בינריים, סדרות בינריות או כל דבר שמכיל 0 או 1,
הנה גרסא איטרטיבית:

קוד:


#include <stdio.h>


void printBin(int digits)
{
        int i = 0, j = 0;

        printf(">> Running for &#37;d digits, %d is the maximum number\n", digits, ( 1 << digits ) -1);
        for (i = 0 ; i < ( 1 << digits ); i++)
        {
                //printf("%d: ", i);
                for(j = digits - 1; j >= 0; j--)
                {
                        printf("%d ", i & ( 1 << j ) ? 1:0 );
                }
                printf("\n");
        }
}


int main()
{
        int digits = 0;
        printf("How many digits? ");
        scanf("%d", &digits);

        printBin(digits);

        return 0;
}

פלט:
קוד:

SDF@sigma:~> gcc test.c -o test
SDF@sigma:~> ./test
How many digits? 3
>> Running for 3 digits, 7 is the maximum number
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
SDF@sigma:~>

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

ציטוט:

נכתב במקור על ידי Davieh (פרסם 671966)
סתם הערה, כיום לא נפוץ השימוש בלולאות FOR ברקורסיה, אלה ב WHILE וכדומה, ככה לפחות באוניורסיטאות .. ולרמות קושי ..
כי בעצם הרקורסיה עושה את העבודה של הלולאות FOR לדוגמא רק בילדיהן ...

מאיפה הבאת את זה? תראה לי דבר אחד שאתה יכול לעשות עם while שאני לא אוכל לעשות עם for. כל אחד ומה שנוח לו.


כל הזמנים הם GMT +2. הזמן כעת הוא 09:41.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ