16-10-2008, 16:55
|
|
|
חבר מתאריך: 19.10.07
הודעות: 65
|
|
פתרון תרגיל 1:
קוד:
void printit(int num)
{
if (num == 4)
Console.WriteLine("4, 4");
else
{
Console.WriteLine("{0}, {1}", num, num);
a(num + 1);
Console.WriteLine("{0}, {1}", num, num);
}
}
מה שקורה בעצם זה שבהתחלה יוצג 1,1, 2,2, 3,3, ואח"כ כשזה יגיע ל4,4, אין קריאות רקורסיביות נוספות ולכן שאר הקוד בהתאמה יתבצע ויוצג 3, 3, 2, 2, 1, 1.
תרגיל 2:
די מבוסס על התרגיל הקודם, יתבצע בצורה הבאה:
קוד:
void print(int num)
{
if (num == 7)
Console.WriteLine("7");
else
{
Console.WriteLine("{0}", num);
a(num + 1);
if(num % 2 == 0)
Console.WriteLine("{0}", num);
}
}
אין ממש הבדל חוץ מהתנאי שהוספתי שהכרחי לסדרה.
תרגיל 3:
קוד:
int pow(int a, int b)
{
if(b == 0)
return 1;
return a * pow(a, b - 1);
}
אני אתן דוגמא למה שקורה:
קוד:
pow(3, 2)
3 * pow(3, 1)
3 * pow(3, 0)
1 is returned
3 * 1 = 3 is returned
3 * 3
ואין קריאות נוספות לפונקציה ולכן מוחזר הערך.
התרגיל הזה גם הוא די דומה לתרגיל הקודם:
קוד:
int multiply(int a, int b)
{
if(b == 1)
return a;
return a + multiply(a, b - 1);
}
דוגמא להמחשה:
קוד:
multiply(3, 3)
3 + multiply(3, 2)
3 + multiply(3, 1)
3 is returned
3 + 3
3 + 6
אין עוד קריאות נוספות ולכן יוחזר הערך.
|