在程序中可以调用函数来完成任务,为了完成相同的任务可以调用同一个函数。如果在函数中调用函数本身,那么改函数就被称为递归函数。
递归代码模板:
void func() {
// 递归结束条件:
if(结束条件) {
return;
}
// 函数执行逻辑
// ......
// 递归调用:
func();
}
递归函数的调用是按层,不是次,有 N 层就同时调用(打开)了 N 个函数,不是 N 次。
无限递归(递而不归、死递归),栈溢出(函数的调用有时间和空间的开销,一个程序中同时调用的函数个数是有限的)。
递归函数分为两类:
举例说明:
递归函数的参数在每次调用时应该是不同的!
如何在递归和循环之间选择?
一般情况下,当循环方法比较容易实现时,应该避免使用递归。当很难简历一个循环方法时,递归可能是一个很好的选择(某些情况下,递归方法总是显而易见的,而循环方法却是难以实现)
某些数据结构(树)本身就是递归时,则使用递归也是最好的方法了。
有一个问题A,把A分解成一系列比A更容易解决的子问题(A0,A1,A2 ...... ),如果解决所有的子问题(A0,A1,A2 ...... ),那么A问题也就解决了,这就是分而治之的思想。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。