java 递归溢出_Java中的深度递归会导致堆栈溢出?

a66ba27c57f50b2e4dc1ff6615ef36e2.png

汪汪一只猫

增加堆栈大小只会用作临时绷带。正如其他人指出的那样,您真正想要的是消除尾部调用,而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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值