一、概念:
函数调用函数本身,这就是递归调用。
递归函数,是将大问题分割成相同的小问题来一次进行解决。
递归函数:
<1>.递归函数要有结束条件,否则函数无限次的调用下去,会把内存资源耗尽,会出现堆栈溢出,导致段错误。
<2>.每递归一次,都要向结束条件靠近。
二、时间复杂度计算
每递归一次的时间复杂度* 递归的次数
三、递归的使用场景
递归函数的优点:代码量小,并且非常简单。但是有的递归函数会对时间和空间造成很大影响,所以使用递归的场景为:
<1>.你可以想的到使用递归
<2>.不会对时间和空间,造成太大影响
四、C程序中的递归练习:青蛙跳台阶
青蛙跳台阶,共有10阶台阶,青蛙每次可以选择跳一阶或者两阶,
问:青蛙跳上这10个台阶共有多少种跳法。
代码如下:
#include<stdio.h>
//计算跳上第n阶 有几种跳法
//返回值:跳法的多少
int func(int n){
//递归的出口
if(n == 1){
return 1;
}
if(n == 2){
return 2;
}
return func(n-1) + func(n-2);
}
int main(int argc, const char *argv[])
{
int ret = 0;
ret = func(10);
printf("%d\n",ret); //89
return 0;
}
五、python的递归函数练习:青蛙跳台阶
代码如下:
//python中的函数无需定义类型限制
def frog(n):
if n == 1:
return 1
if n == 2:
return 2
return frog(n-1) + frog(n-2)
# 有参函数的调用
sum = frog(10)
print("sum = ", sum) #89