递归

本文深入探讨了函数调用的过程,包括参数传递、局部变量存储和控制转移。同时,介绍了递归的概念,强调其在函数调用中的特殊性,分析了递归函数的时间复杂度和空间复杂度。以汉诺塔为例,展示了递归方程的计算和空间需求。递归函数的时间复杂度通常通过迭代展开分析,而空间复杂度则与递归层数直接相关。
摘要由CSDN通过智能技术生成

函数嵌套调用

  1. 当前运行函数在调用另一个函数前
    a.将所有的实参、返回地址等信息传递给被调用函数保存
    b.为被调用函数的局部变量分配存储区
    c.将控制转移到被调用函数的入口

  2. 被调用函数返回到调用函数前
    a.保存被调用函数的计算结果
    b.释放被调函数的数据区
    c.依照被调函数保存的返回地址将控制转移到调用函数

  3. 多个函数的嵌套调用遵循“后调用先返回”的原则

递归

  1. 类似函数的嵌套调用,只是调用函数与被调用函数是同一个函数
  2. 层次:一次递归函数的调用称为一层
  3. 工作记录:每一层递归所需信息
  4. 活动记录:位于栈顶的工作记录

递归函数的时间复杂度与空间复杂度分析

  1. 时间复杂度
    常常采用迭代法对递归方程进行展开分析
  2. 空间复杂度
    递归函数执行时,系统需要建立一个“递归工作栈”去存储每一层递归所需信息,因此分析空间复杂度就要确定工作站的大小,也就是分析有多小层

经典汉诺塔(直接附上递归树)

盘子为4个的递归树很明显,递归方程为f(n)=2^n-1,f(n)表示问题规模为n时函数所需要执行的次数,则O(n)=O(f(n))=O(2的n次方),空间复杂度为S(n)=n(即层数)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值