【问题标题】:How to handle stack overflow while calling function recursively?递归调用函数时如何处理堆栈溢出?
【发布时间】:2019-02-01 00:54:02
【问题描述】:

我想iterate all nodes of tree view

所以当我当时有大量节点时 堆栈溢出发生了,如何处理这种情况,因为我必须迭代所有节点。

var datas= getdatas();

    function treenode() {
        var item = datas.pop();

        if (item) {
        //some operation 
            treenode();
        }
    };
  treenode();

【问题讨论】:

  • 退出条件在哪里?
  • 它已经存在 if( item )
  • 这不是退出/基本条件...您需要在此处添加基本/退出条件
  • 如果您所做的只是从数组中弹出,并且如果它不为空,那么您将再次从数组中弹出,那么递归是不合适的,您可以使用 for 循环来执行此操作。如果你得到一个空条目,只需循环 datas.length 并中断。
  • @ChrisCousins ,是的,如果它是一个简单的数组,但它是树节点结构中的树节点,我刚刚写下了整体场景而不是整个代码,因为它是一个大函数,我必须只用递归解决这个问题

标签: javascript recursion stack-overflow


【解决方案1】:

大家好,我找到了 settimeout 函数的解决方案

现在我没有通过移动得到堆栈溢出错误

简单的调用堆栈到基于事件的调用

var datas= getdatas();

    function treenode() {
        var item = datas.pop();

        if (item) {
        //some operation 
         setTimeout(treenode,0);
        }
    };
  treenode()

【讨论】:

猜你喜欢
  • 2019-08-07
  • 2015-09-23
  • 2018-05-28
  • 2017-10-20
  • 2013-02-22
  • 2011-02-26
  • 1970-01-01
相关资源
最近更新 更多