繁体   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