如果我需要在中间中止递归子程序,我该怎么办?
引发异常并将其捕获到递归子程序之外。
将一个布尔参数Exit_Right_Now添加到递归子程序中,这将使其从递归的第N级遍历到外部调用子程序。
停止使用显式递归并重写我的算法而不递归。
上述哪种变体是可行的,哪些不是?
请注意,我正在使用Ada编程语言编写。由于Ada RM允许对异常进行一些优化,我不太确定异常是否会做正确的事情,而不是"无效"在异常提升之前的一些操作。阿达会做正确的事吗?
答案 0 :(得分:2)
对Ada没有任何具体知识,显然所有方法都可以同样有效;但是,3。可能会导致实施更难以理解。为了评估1.对2.,我可能感兴趣的是,执行中止的情况是更多用例还是错误情况。如果在递归中提前终止是某些执行流程,通常是预期的",则可能会将异常视为滥用语言功能。