循环代码或递归方法调用?

我正在开发项目,根据数据库中的规则来制定交付时间。 同一天可能有一些可能(当天交付),但星期五,星期六也没有规则,所以我们必须向前看并找到星期一规则。

对不起长时间的解释...

为了增加复杂性,我们还计算何时可以在交货点收集物品,以便根据上午/下午的担保计算接货时间,并确保该地点是开放的,而不是假期......

当我最初编写逻辑时,我创建了一个采用日期并计算所有这些值并返回我们的计算模型的方法。 就在结束之前,我进行了测试以确保模型已经填充,否则没有为该日期和时间进行匹配,我将日增加1,然后再次调用我的方法,使用增加的日期时间和规则,直到我点击返回和一切都回到原来的堆栈调用。 对我来说,这就像一个魅力,单一级别的声明,没有复杂的和或

基本上,代码被击落,因为其他测试和bug的开发人员不知道如何调试它,或者它在做什么。

新提案是一种单一的方法,它可以完成同样的事情,但只要包含在while语句中,直到符合条件。 然后在这段时间内,有一个foreach验证交付可以被满足,一条条件if和nested conditional或者然后返回计算模型。

从自身内部回忆同样的方法,直到最终的条件达到调整后的值,这不好吗?

这两个代码片段都能很好地工作,我只是发现它们嵌套在while和condition中,如果比一套简单的规则更难解密。


尽管递归可以导致一些优雅的解决方案,但它也可能导致难以跟踪代码和堆栈溢出,因为每个递归调用都会分配一个新的堆栈帧。 默认情况下,每个线程都有一个1MB的堆栈,所以不会花费很长的时间用完空间。

尾递归可以解决这个问题,只要你真的做了尾递归调用,编译器就可以发现这一点。 在IL级支持使用TailCall指令进行尾递归,但C#编译器不会生成使用它的代码。

链接地址: http://www.djcxy.com/p/80623.html

上一篇: Looping code or recursive method calling?

下一篇: tail. prefix in ILAsm – any example of use?