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

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

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 17 September 2009 בשעה 18:43 | IP רשוּם
ציטוט אורחת

צריכה עזרה פתירת שאלה: כתבו  פונקציה רקורסיבית המקבלת מספר שלם וחיובי N ומספר שלם וחיובי K. הפונקציה מדפיסה את כל הצירופים של K איברים שלמים וחיוביים (כולל אפס) שסכומם הוא בדיוק N

דגומא N -4    K-3     אזי הפלט יהיה:

      4 0 0    3 1 0    3 0 1    2 2 0    2 1 1    2 0 2    1 3 0    1 2 1    1 1 2    1 0 3

      0 4 0    0 3 1    0 2 2    0 1 3    0 0 4

השתמשתי במערך עזר והצלחתי לפתר את השאלה רק במקרה הפרטי שK  הוא 3
כאשר K הוא 4 ומעלה אני לא מצליחה לכלול את המקרים 1120 למשל....
אני לא בטוחה איך לפצל את העץ הרקורסיבי.. אם למישהו יש רעיונות

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


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 18 September 2009 בשעה 01:28 | IP רשוּם
ציטוט גד

רשמתי פתרון בסישארפ, הפתרון הוא לא רקורסיבי אלא איטרטיבי, וכמו כן הוא איננו מפורט. נסי להבין את העקרון ולנסות את הפתרון בצורה הרקורסיבית...
(הפתרון הזה הוא לא הפתרון הכי יעיל לפתירת הבעיה דרך אגב):
קוד:
using System;

class Test
{
    static void PrintIterativeSolution(int N, int K)
    {
        if (N >= 10 || K >= 10)
        {
            Console.WriteLine("N/K must be below 10.");
            goto End;
        }

        string num = "";
        for (int i = 0; i < K; i++)
        {
            num += N.ToString();
        }

        int highest_num = Convert.ToInt32(num);
        string tmp;
        int sum;
        string digit;

        int trueCOUNT = 0;

        Console.ForegroundColor = ConsoleColor.White;

        for (int i = 0; i <= highest_num; i++)
        {
            tmp = i.ToString();
            while (tmp.Length < K)
            {
                tmp = "0" + tmp;
            }

            sum = 0;
            for (int j = 0; j < K; j++)
            {
                digit = "";
                digit += tmp[j];

                if (sum <= N)
                {
                    sum += Convert.ToInt32(digit);
                }
            }

            if (sum == N)
            {
                trueCOUNT++;
                Console.WriteLine(tmp);
            }

        }

        Console.ForegroundColor = ConsoleColor.Green;
        Console.WriteLine("Sums = " + trueCOUNT);
        Console.ForegroundColor = ConsoleColor.Gray;

    End:
        { }
    }
    static void Main(string[] args)
    {
        PrintIterativeSolution(9, 3);
    }
}

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

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

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

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