我试图深入探索FP,稍微深入地图表面 - 减少我最近大部分时间做的东西 - 是的,我知道还有更多,因此...如何在不使用额外空间的情况下反转堆栈... fp-style
无论如何,命令式编程中的一个经典问题是堆栈反转“不使用额外空间”。该解决方案通常使用双递归调用堆栈来访问堆栈的底部,获取底层元素,并将其返回到外部递归,以相反的顺序重新构建堆栈。我一直在试图解决Haskell中的同一个问题,但我无法弄清楚如何用该语言来表达它。提示?使用额外的空间
编辑是,使用堆栈为,问题往往是在考试和面试来看看人们如何看待的东西一招一个。另外,是的,我知道东西是不可变的,所以创建一个与给定的相反的重复堆栈显然是可以接受的。
(顺便说一句,你们已经失败了采访......,JK)
请注意,使用调用堆栈并不是“没有使用额外的空间”...... –
什么是“额外空间”? Haskell中的列表是不可变的。如果你反转一个,你必须创建一个新的。除非你写出超级天真的O(n^2)反向,否则你已经状态良好。标准的O(n)解决方案已经使分配最小化。 – Carl
您不能在O(1)空间FP样式中反转堆栈。在FP中,事物是不可改变的。您的命令性解决方案也使用O(n)空间,因为递归需要空间。 –