导致堆栈溢出的最短代码是啥? [关闭]
Posted
技术标签:
【中文标题】导致堆栈溢出的最短代码是啥? [关闭]【英文标题】:What's the shortest code to cause a stack overflow? [closed]导致堆栈溢出的最短代码是什么? [关闭] 【发布时间】:2010-09-08 21:32:47 【问题描述】:为了纪念 Stack Overflow 的公开发布,什么是最短的导致堆栈溢出的代码?欢迎任何语言。
ETA:只是为了澄清这个问题,因为我是一个偶尔的 Scheme 用户:尾调用“递归”实际上是迭代,任何可以通过体面的编译器相对简单地转换为迭代解决方案的解决方案不会被计算在内。 :-P
ETA2:我现在选择了一个“最佳答案”;请参阅this post 了解基本原理。感谢所有贡献的人! :-)
【问题讨论】:
【参考方案1】:Fortran,13 和 20 个字符
real n(0)
n(1)=0
end
或
call main
end
第二种情况是依赖于编译器的;对于 GNU Fortran,需要使用 -fno-underscoring
编译。
(两个计数都包括必需的换行符)
【讨论】:
【参考方案2】:Hoot 溢出!
// v___v
let rec f o = f(o);(o)
// ['---']
// -"---"-
【讨论】:
【参考方案3】:哈斯克尔:
main = print $ x 1 where x y = x y + 1
【讨论】:
【参考方案4】:Dyalog APL
fib←
⍵∊0 1:⍵
+/∇¨⍵-1 2
【讨论】:
【参考方案5】:int main(void) return main();
【讨论】:
失败,您的答案可以进行尾调用优化。 :-P(编译器将其有效地转换为goto _main
,其中_main
是与您的主函数相对应的全局符号。)【参考方案6】:
php 是递归缩写
【讨论】:
【参考方案7】:Python:
import sys
sys.setrecursionlimit(sys.maxint)
def so():
so()
so()
【讨论】:
为什么是 sys.maxint,只需将其设置为 1,更快地崩溃...并保存字符。 如果我设置recursionlimit(1),它会引发一个RuntimeError,而不是崩溃。【参考方案8】:Java:35 个字符
我觉得为时已晚,但我还是会发布我的想法:
class Anew A();staticnew A();
使用静态初始化器和实例初始化器功能。
这是我电脑上的输出(注意它显示了两条错误消息):
Exception in thread "main" java.lang.***Error
at A.<init>(A.java:1)
......
at A.<init>(A.java:1)
Could not find the main class: A. Program will exit.
另请参阅:http://download.oracle.com/docs/cd/E17409_01/javase/tutorial/java/javaOO/initial.html
【讨论】:
虽然你的答案仍然比获胜答案长 :-),但它仍然是一种非常简洁的方法,所以 +1 给你! 最后,我意识到是别人先做的。它位于很难找到的中间页面。【参考方案9】:.
【讨论】:
那是什么语言?高尔夫脚本? :-)【参考方案10】:javascript(17 字节)
eval(t="eval(t)")
VB 脚本(25 字节)
t="Execute(t)":Execute(t)
【讨论】:
【参考方案11】:C++ 编译器错误信息
template<int n>struct ff<n+1>a;;f<0>::a;
输出:
$ g++ test.cpp;
test.cpp:1: error: template instantiation depth exceeds maximum of 500 (use -ftemplate-depth-NN to increase the maximum) instantiating ‘struct f<500>’
test.cpp:1: instantiated from ‘f<499>’
test.cpp:1: instantiated from ‘f<498>’
......
即使编译器通过模板,也会出现下一个错误:缺少main
。
【讨论】:
以上是关于导致堆栈溢出的最短代码是啥? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章