好吧,最近,我遇到了一个有趣的问题。在潜在的(实际上)无限递归序列中生成第n个值。该特定算法将在成功的至少10到15个堆栈参考中。我的第一个想法是抛出一个看起来像这样的SuccessException(C#):
class SuccessException : Exception { public string Value { get; set; } public SuccessException(string value) : base() { Value = value; } }
然后执行以下操作:
try { Walk_r(tree); } catch (SuccessException ex) { result = ex.Value; }
然后我的思绪回到了这里,我一遍又一遍地听到,从来没有将异常用于流控制。有没有借口?如果要实施,您将如何构建这样的结构?
在这种情况下,我将查看您的Walk_r方法,您应该拥有一个返回值的东西,引发异常以指示成功,这不是常见的做法,并且至少会使看到该代码的任何人感到困惑。更不用说与异常相关的开销了。