簡體   English   中英

遞歸函數調用如何在循環中工作?

[英]How do recursive function calls work in loops?

我有一個函數,其中有一個調用該函數的循環。

function displayItem(item, isChild)
{
    if (isChild)
    {
        writeOutput('<li>' & item.name & '</li>');
    }
    else
    {
        writeOutput('<li>' & item.name);
    }
    try
    {
        if (item.hasChild)
        {
            writeOutput('<ul>');
            numberOfItems = item.numChildren;
            for (x=1;x LT numberOfItems;x++)
            {
                displayItem(item.child[x], true);
            }
            writeOutput('</ul>');
        }
    }
    catch(Exception e){}
    writeOutput('</li>');
} 

函數執行完后,循環將從執行中繼續取x的值,而不是從之前中斷的位置開始取回。

例如:x為3。displayItem傳遞“ item.child [3]”和true。 它通過該函數起作用,進入循環,執行直到x = 4的循環,然后退出循環。 函數結束,並且(從我的理解中)返回到x應該為3的點。與其從3拾取,不加一個(使其變為4),然后再次執行循環,它從4(值)開始從“內部”遞歸調用循環)。

我知道這聽起來並不連貫,但是我想不出其他任何方式來解釋它。

我有做錯什么嗎,還是這只是生活的事實,我必須解決?

更新:經過更多研究之后,似乎最早的循環正在提早退出。 對“ x”使用局部變量可解決計數問題,但如果看前面的示例,循環僅從4退出。 它在滿足條件之前就離開了。 有任何想法嗎?

您忘記將x設置為該函數的局部值。

不要使用全局變量。 避免他們像瘟疫一樣。

問題是這一行:

numberOfItems = item.numChildren;

從第二個調用返回時,此值不會變回正確的值。 因此,如果在函數本身完成調用並返回到該函數的原始實例后自行調用該函數時將numberOfItems設置為4,則numberOfItems仍為4。

此代碼有效:

function displayItem(item, isChild)
{
    var x = 1;
    if (isChild)
    {
        writeOutput('<li>' & item.name & '</li>');
    }
    else
    {
        writeOutput('<li>' & item.name);
    }
    try
    {
        if (item.hasChild)
        {
            writeOutput('<ul>');
            for (x=1;x LT item.numChildren;x++)
            {
                displayItem(item.child[x], true);
            }
            writeOutput('</ul>');
        }
    }
    catch(Exception e){}
    writeOutput('</li>');
} 

嘗試這個

function displayItem(item, isChild)
{
   var x = 0;
   var numberOfItems = 0;

   if (isChild).......................
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM