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

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

Labs 09-12-08 15:15

באג בפונ'
 
PHP קוד:

<?
function ck($x,$a,$b,$c,$l=0) {
    if (
$l==$x)
        return 
1;
    if ((
$l+$a)<=$x)
        return 
ck($x,$a,$b,$c,$l+$a);
    if ((
$l+$b)<=$x)
        return 
ck($x,$a,$b,$c,$l+$b);
    if ((
$l+$c)<=$x)
        return 
ck($x,$a,$b,$c,$l+$c);
}
echo 
ck(10,3,7,2);
?>

זה פשוט לא מדפיס כלום...
אשמח להבין למה

זה יכול להיות בגלל הRETURN 1? פשוט ככה היינו עושים בC וזה היה עובד בסדר גמור זה היה פשוט מחבר את ה1ים ביציאה מהרוקרסיה

Elad-A 09-12-08 15:21

מה אתה מנסה לעשות?
אולי יש דרך פשוטה יותר.

daMn 09-12-08 15:47

כן מאוד יכול להיות שזה בגלל האחד, תעטוף אותו אותו במרכאות ושיהיה סטרינג ואז תנסה.
ד"א למען הסדר הטוב תעבוד עם elseif ובסוף עם else בשביל לדבג.

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

SDF 10-12-08 08:33

לרקורסיה שלך פה אני שום משמעות, נגיד והגעת לסוף הרקורסיה, זה פשוט מעביר את ה-1,
אתה לא מחבר פה שום דבר לשום דבר, אז למה שזה יחבר לך את האחדות?

למה זה לא מדפיס? כי באחד השלבים של הרקורסייה אף אחד מהתנאים לא מתקיים,
ולכן הפונקציה לא מחזירה שום דבר, אתה יכול לבדוק ע"י זה שתסים בסוף
return "test"; ותראה.

קוד:


<?php
function ck($x,$a,$b,$c,$l=0) {
    if ($l==$x)
        return 1;
    if (($l+$a)<=$x)
        return ck($x,$a,$b,$c,$l+$a);
    if (($l+$b)<=$x)
        return ck($x,$a,$b,$c,$l+$b);
    if (($l+$c)<=$x)
        return ck($x,$a,$b,$c,$l+$c);
// אם שום דבר לא התקיים
    return "test";
}
var_dump ( ck(10,3,7,2) );
?>


vadimg88 10-12-08 11:53

אני הייתי כותב ככה:

PHP קוד:

<?php
function ck($x$a$b$c$l=0
{
    
$return 0;
    
    if( 
$l == $x )
    {
        
$return += 1;
    }
    else if( (
$l $a) <= $x )
    {
        
$return += ck($x$a$b$c$l+$a);
    }
    else if( (
$l $b ) <= $x )
    {
        
$return += ck($x$a$b$c$l+$b);
    }
    else if( ( 
$l $c ) <= $x )
    {
        
$return += ck($x$a$b$c$l+$c);
    }
    else 
    {
        
// nothing really
    
}
    
    return 
$return;
}
?>

אני לא יודע בידיוק מה זה עושה אבל ככה יהיה נכון לרשום את זה.

Labs 10-12-08 12:11

זה תרגיל כזה
X - מספר מסויים
A B C - מספרים קטנים יותר

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

vadimg88 10-12-08 14:43

מה שאתה עושה למעלה לא ממש עושה את מה שתיארת עכשיו.

Labs 10-12-08 16:25

ציטוט:

נכתב במקור על ידי vadimg88 (פרסם 686373)
מה שאתה עושה למעלה לא ממש עושה את מה שתיארת עכשיו.

למה לא?
תוכל עלי בבקשה להראות מה כן יעשה את זה?


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

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