有时在面试中,我可能会使用递归来解决问题(例如,添加1
到无限精度整数),或者当问题本身适合使用递归时。有时,可能是由于大量使用递归来解决问题,因此,不用考虑太多,就使用递归来解决问题。
但是,在决定使用递归解决问题之前,应考虑哪些因素?
我有一些想法:
如果我们对每次都减半的数据使用递归,那么使用递归似乎没有问题,因为所有可以容纳16GB RAM甚至8TB硬盘的数据都可以通过深度仅为42层的递归进行处理。(因此不会出现堆栈溢出(我认为在某些环境中,堆栈的深度可以达到4000层,远超过42级,但是同时,这还取决于您拥有多少局部变量,因为每个调用堆栈占用的内存更多)如果有很多局部变量,则是确定堆栈溢出的是内存大小而不是级别)。
如果您使用纯递归来计算斐波那契数,那么您真的要担心时间复杂性,除非您缓存中间结果。
以及如何添加1
到无限精度整数?也许这是有争议的,例如,您将使用长度为3000位数或4000位数的数字,以至于它会导致堆栈溢出吗?我没想到,但是答案可能不是,我们不应该使用递归,而应该使用普通循环,因为如果在某些应用程序中,该数字确实需要4000位数长,以检查某些数字,该怎么办?数字的属性,例如数字是否为质数。
最终的问题是:在决定使用递归解决问题之前,有哪些注意事项?
1
无限精度整数呢?您可以说,是的,它们可以简化为较小的问题,但是纯递归不适合此操作