1、递归函数
特点:
1)函数直接或者间接调用自己->递归的函数
2)函数退出条件
3)形参体现问题规模不断缩小
形参要体现问题规模 退出条件 w
例:求前n项和
图解思路:
int GetSum(int n) {
if (n == 1)
return 1;
return GetSum(n - 1) + n;
}
int main()
{
int result=GetSum(4);
return 0;
}
2、 斐波那契额数列:
int F(int n) { // 1 1 2 3 5 8 13
if (n == 1 || n == 2)
return 1;
return F(n - 1) + F(n - 2);
} //时间复杂度
时间复杂度一定和递归的深度有关
3、 二分查找递归:
4、123 分别获取各位数字 打印 -> 递归
void Print(int num) {
if (num != 0) {
printf("%5d",num%10);
Print(num/10);
}
}
5、栈的开销问题
函数的调用机制:
局部变量内存程序执行过程中"动态"建立和释放。"动态”->系统自动管理栈内存
进行一个函数调用:T
1)建立栈帧空间(函数的返回地址,函数调用的上下文)
2)保护现场:主调函数运行状态入栈
3)形参进行存储空间开辟,形参拷贝实参,函数局部变量内存分配
4)执行函数体
6)恢复现场:获取主调函数的运行状态,返回主调函数执行的地址,继续主后续语句
6、动态内存分配问题:
栈:高地址->低地址
堆1.5G ~1.9G ->动态内存开辟
低地址->高地址内存开辟―->程序员开辟,自己释放(防止内存泄漏`)