如何直接跳出深度递归,而不是一层一层的跳出来?
几种方法:
1.在递归结束时抛出异常,在顶部代码处尝试catch。
2.把递归函数放到一个独立的线程中执行,在主线程中做条件等待,递归结束时通知,然后直接退出线程。
3.setjmp+longjmp本质上类似于exception,只是在纯c中实现。
都很诡异很聪明,一般用不到,好吗?
这需要一些独创性。在高级语言的层面,我觉得没有通用的方法,也不推荐。
原则上,调用一个函数时,返回地址被推入堆栈,上层的返回地址要按照FIFO逐层取出。
也非常不鼓励例外。?
合理的话
对于这种情况,后藤是最简洁的。
递归。我只是把题目看清楚了。
我想问的是为什么会有这么奇怪的需求。
能描述一下应用场景吗??
假设每层递归的中间状态可以忽略!那用递归有什么意义?直接用循环就好了!
如果需要考虑递归的中间状态!那么为什么要直接回到最外层呢?
在实际工作中,要避免递归!因为递归可以分解成循环!递归效率太低!可以试试goto,合理使用的话可以节省大量代码,简化复杂的逻辑。都说后藤很可怕,但是没有人说用过后藤之后发生过什么可怕的事情。这个问题有点意思。。。我见过很多程序员写了一个递归,出不来。。。哈哈哈哈。。。跑题了。。。可以用一个全局变量来判断吗?虽然我不太喜欢全局变量。。#include后来使用了两个非常奇怪的标准库函数:setjmp()和longjmp()。人非本地跳,不知道比goto高在哪。