我正在编写一个函数,该函数最多可以调用5000次。当然,我得到了StackOverflowError
。有什么办法可以以一种非常简单的方式重写此代码?:
void checkBlocks(Block b, int amm) {
//Stuff that might issue a return call
Block blockDown = (Block) b.getRelative(BlockFace.DOWN);
if (condition)
checkBlocks(blockDown, amm);
Block blockUp = (Block) b.getRelative(BlockFace.UP);
if (condition)
checkBlocks(blockUp, amm);
//Same code 4 more times for each side
}
顺便说一下,我们可以调用这些函数的深度有什么限制?
使用显式的对象堆栈和循环,而不是调用堆栈和递归:
void checkBlocks(Block b, int amm) {
Stack<Block> blocks = new Stack<Block>();
blocks.push(b);
while (!blocks.isEmpty()) {
b = blocks.pop();
Block blockDown = (Block) b.getRelative(BlockFace.DOWN);
if (condition)
blocks.push(block);
Block blockUp = (Block) b.getRelative(BlockFace.UP);
if (condition)
blocks.push(block);
}
}
Lodash castArray函数没有任何特殊之处。有没有什么方法可以在没有任何外部库的情况下,利用最新的语言功能解决这个问题,但时间很短? 如果您不熟悉该任务: 有没有办法在没有类型检查的情况下做到这一点?请注意,我寻找最短的等效物ES6。
问题内容: 我有这样的代码: 实例化B可以按预期工作,但是实例化C无限递归并导致堆栈溢出。我该如何解决? 问题答案: 实例化C调用时,仍然是C,因此super()调用将其带回B。 调用super()时,请直接使用类名。因此,在B中,请致电,而不是(最好在C中使用)。在Python 3中,您可以仅使用不带参数的super()来实现同一目的
问题内容: 我想定义一个包含和方法的类,可以按如下方式调用该类: 为了不使用隔行扫描类,我的想法是覆盖和方法并检查给定名称是否将return重定向到。但是我遇到了无限递归的问题。示例代码如下: 正如在代码中尝试创建新属性一样,它调用,再次调用,依此类推。我怎么需要更改此代码,即,在这种情况下,一个新的属性的创建,持有的价值? 还是有更好的方法来处理“映射”到的呼叫? 总是有关于为什么的问题:我需要
问题 你想在一个函数中调用相同的函数。 解决方案 使用一个命名函数: ping = -> console.log "Pinged" setTimeout ping, 1000 若为未命名函数,则使用 @arguments.callee@: delay = 1000 setTimeout((-> console.log "Pinged" setTimeout arg
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n) = n! = 1 x 2 x 3 x ... x (n-1) x n = (n-1)! x n = fact(n-1) x n 所以,fact(n)可以表示为n x fact(n-1),
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘n! = 1 x 2 x 3 x ... x n,用函数fact(n)表示,可以看出: fact(n)=n!=1\times2\times3\times\cdot\cdot\cdot\times(n-1)\times n=(n-1)!\times n=fact(n-1)\times n