我一直认为让你的代码不易被追随而且可以避免的事情被认为是不好的做法.递归似乎是这些事情中的一个(更不用说它可能导致堆栈溢出等问题),所以当我们必须在编程课程中学习认真对待它时我感到有点惊讶(因为它偶尔导致更短码).在我看来,教授之间也存在分歧......
人们已经问过这个特定于语言的东西(比如Python,评论将其与goto语句进行比较),主要针对一个问题,但我对一般情况感兴趣:
在现代编程中,递归是否被视为不良实践?什么时候应该避免,有什么情况不可以的?
相关问题我发现:
递归是一个特征吗?(不讨论它是好还是坏)
递归是否比循环更快?(答案描述了递归可以导致函数式语言的改进,但在其他语言中却很昂贵),还有其他讨论性能的问题
ric*_*ick 13
递归编程并不是一种糟糕的做法.它是工具箱中的一个工具,就像任何工具一样,它是唯一使用的工具,当坏事发生时.或者当它在适当的环境中使用时.
你什么时候使用递归?你有一个树数据集,你需要执行相同的逻辑,这是很好的母鸡.例如:您有一个字符串元素的树列表,并且您希望计算所有字符串的总长度,一个分支.您将定义一个方法来计算列表元素的长度,然后查看该元素是否具有兄弟,如果它确实调用了该方法,则传递兄弟 - 并且该过程重新开始.
最常见的陷阱是堆栈溢出.当列表太大时,无法一次处理.因此,您将实施检查以确保永远不会发生.例如将链表分解为可管理的部分和功能,利用静态变量来跟踪您遍历的级别数 - 一旦超过该数字就会失败.
当数据集不是树类型数据集时,应避免使用.我唯一能想到的是你实际上无法避免使用递归是在不支持循环的编程语言(Haskell).