Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Szmeby
    tag

    Thx mint mindig.

    Megcseréltem az If-eknél a sorrendet és most működik....

    if (row == arr.length -1 || row == 0 || column == arr[row].length -1 || column == 0)
    return true;
    else if (arr[row-1][column] < x && flows(row-1,column, arr))
    return true;
    else if (arr[row+1][column] < x && flows(row+1,column, arr))
    return true;
    else if (arr[row][column-1] < x && flows(row,column-1, arr))
    return true;
    else
    return (arr[row][column+1] < x && flows(row,column+1, arr));

    Deeee, ezt megint nem teljesen értem. Ok gondolom ha az első értek hamis, akkor eleve be sem kéri a 2. elemet. De miért nem megy úgy, ha előszór a rekurzív képletet hívom meg, ha hamis, akkor lep tovább a következö if-re?

    Szuper.
    Jól gondolod, az && meg a || shortcut operátornak is hívja magát, ha a feltétel eleje önmagában is meghatározza a feltétel kimenetelét a többi része már fel sem hívódik.

    "De miért nem megy úgy, ha előszór a rekurzív képletet hívom meg ..."

    Azért mert a rekurzív hívásnak le kell futnia ahhoz, hogy a feltételben ki lehessen értékelni. De nem fut le. Belemegy a metódusba újra új paraméterekkel, majd azon belül is újra megint új paraméterekkel, és így tovább. A végtelen ciklus miatt csak befelé megy, sose jön ki onnan. Valaminek terminálnia kell, csak akkor jut vissza, akkor tudja azt mondani, hogy true vagy false, az if-ben akkor ki tud értékelődni, és lefutna a programod.

    Nézd át újra a rekurzióról tanultakat. Vagy tényleg tegyél bele egy breakpointot, és - ha Eclipse-et használsz - nyomogasd az F5-öt a flow hívásnál. Ezzel belelép... megnézheted, miben változtak a paraméterek és hogy a hívás meddig jut el a metódusban, mielőtt újra ráhívna saját magára, F5. Nézd közben a stack-et is, minden egyes rekurzív hívásnál egy új sorral bővül.
    Ha már érted, vedd ki a breakpointot és F8-cal engedd el, hadd teljesítse be a végzetét. :)

Új hozzászólás Aktív témák