汪汪一只猫
增加堆栈大小只会用作临时绷带。正如其他人指出的那样,您真正想要的是消除尾部调用,而Java出于各种原因没有此功能。但是,您可以根据需要作弊。手中有红色药丸吗?好的,请这样。您可以通过多种方法将堆栈交换为堆。例如,不是在函数内进行递归调用,而是让它返回在评估时进行调用的惰性数据结构。然后,您可以使用Java的for-construct解散“堆栈”。我将举一个例子。考虑以下Haskell代码:map :: (a -> b) -> [a] -> [b]map _ [] = []map f (x:xs) = (f x) : map f xs请注意,此函数永远不会评估列表的末尾。因此,该函数实际上不需要进行递归调用。实际上,在Haskell中,它会为尾巴返回一个thunk,如果有需要的话会调用它。我们可以在Java中做同样的事情(这使用了Functional Java中的类):public Stream map(final F f, final Stream as) {return as.isEmpty() ? nil() : cons(f.f(as.head()), new P1>() {public Stream