它不会永远运行。每次堆栈溢出都会导致代码移至finally块。问题在于这将需要非常,非常长的时间。时间顺序为O(2 ^ N),其中N是最大堆栈深度。
想象最大深度为5
foo() calls foo() calls foo() callsfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo() finallyfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo() finally calls foo() callsfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo() finallyfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo()finally calls foo() calls foo() callsfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo() finallyfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo() finally calls foo() callsfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo() finallyfoo() calls foo() which fails to call foo()finally calls foo() which fails to call foo()
要使每个级别进入finally块都需要两倍的时间,而堆栈深度可能是10,000或更大。如果您每秒可以进行10,000,000次呼叫,那么这将花费10 ^
3003秒,甚至比宇宙的时间还要长。



