知识卡片
递归必须收敛
内容
递归把大问题拆成同构小问题,关键不是“函数调用自己”,而是每次调用都逼近退出条件。没有规模缩小和停止条件的递归,只是换一种方式写无限循环。
参考来源
- 位置:《Go语言高级开发与实战》第2章《Go语言高级编程技巧》(源文件:_epub-src/GoYu Yan Gao Ji Kai Fa Yu Shi Zhan_split_015.html)
- 结论依据:原文定义递归函数,并列出可拆成子问题、处理思路相同、必须有退出条件三项,因此可推出递归的核心是收敛结构。
- 原始内容:程语言都支持递归函数,Go语言也不例外。如果一个函数直接或间接调用这个函数本身,则该函数称为递归函数。在实际开发过程中,递归函数可以解决许多数学问题,如计算给定数字阶乘、产生斐波那契数列等。 一般来说,构成递归需要具备以下条件。 ● 一个问题可以拆分成多个子问题。 ● 拆分前的问题与拆分后的子问题除了数据规模不同,处理问题的思路是一样的。 ● 不能无限制地调用本身,子问题需要有退出递归状态的条件。 注意 :编写递归函数时,一定要有终止条…