PDA

צפה בגרסה המלאה : עזרה בפונקציות



sivan1233210
14-11-2008, 14:26
בס"ד

כתוב פונקציה המקבלת 2 מספרים ומחזירה את מכפלתם ללא שימוש בכפל.
ניסיתי לעשות פונקציה רקורסיבית:



Private Sub Form_Load()
Dim x As Integer
Dim y As Integer
x = InputBox("enter number","enter number")
y = InputBox("enter number","entert number")
Call Rec(x, y)
End Sub
Public Function Rec(a As Integer, b As Integer) As Integer
If b = 1 Then
MsgBox a
End If
MsgBox (a + Rec(a, b - 1))
End Function


אבל זה לא מצליח לי.
זה תמיד מחזיר לי את המספר הראשון

מה הבעיה?

תודה לעזורים
שהת שלום :)

Hurricane
14-11-2008, 14:29
למה להשתמש ברקורסיה (לפחות ב- VB, זה פשוט מכוער) כשאפשר בלולאה אחת פשוטה?


public function multiply(a as integer, b as integer) as integer
dim i%, sum%
for i=1 to b
sum=sum+a
next i

כמובן שניתן לייעל את זה מעט ולא להשתמש בעוד משתנה i, אבל זה לא משנה. ם.ם

sivan1233210
14-11-2008, 14:42
בס"ד

תודה רבההההההה
שבת שלום :)!

sivan1233210
14-11-2008, 14:42
בס"ד

בכל זאת למה הפעולה שלי לא טובה?

Hurricane
14-11-2008, 15:05
למה את מציגה את a כל פעם שהפונקציה מזומנת? אז צריכה לכתוב פונקציה שמחזירה מכפלה של שני מספרים. אחר כך תטפלי בהצגה.
כתבתי את זה בג'אווה:

public class Multiply
{
public static void main(String[] args)
{
System.out.println(multiply(3, 5));
}
public static int multiply(int a, int b)
{
if (b == 1)
return a;
else
return a + multiply(a, b-1);
}
}
תוכלי להמיר את זה ל- VB, וזה אמור לעבוד. :)

sivan1233210
14-11-2008, 15:10
בס"ד

תודה.
מה יותר יעיל? הרקורסיבי או הרגיל?

Hurricane
14-11-2008, 15:11
אני לא יודע איך בודקים יעילות ברקורסיה. אני אקרא על זה בשיעור מחשבים הבא. :)

Hurricane
15-11-2008, 17:39
אוקיי הבנתי מה הטעות שלך.
הטעות שלך היא שלא כך מחזירים ערך.
אם שם הפונקציה שלך הוא a, אז על מנת להחזיר את ערך, את צריכה לרשום: a=b. כאשר b הוא הערך המוחזר.
מה שאת עשית הוא להציג את הערך בכל שלב, ובכלל לא החזרת ערך.

הנה תוכנית אשר מקבלת שני ערכים ומחשבת בשיטה רקורסיבית את מכפלתם:

Private Function Multiply(a%, b%) As Integer
If b = 1 Then
Multiply = a
Else
Multiply = a + Multiply(a, b - 1)
End If
End Function

Private Sub Form_Resize()
Form1.Print Multiply(3, 6)
End Sub

רקורסיה זה כיף, אני מת שנתחיל ללמוד את זה. :)

sivan1233210
15-11-2008, 19:25
בס"ד

תודה רבה!
חח מה כיף בזה?!!
זה ממש קשה.
הלוואי ויכלתי לדעת את זה טוב
איך אתה יודע רקורסיה אם עוד לא התחלתם?

שבוע טוב :)! ותודה שוב !!