算法:递归的内部实现原理

递归 是一种程序的形式,在函数体内调用自身

定义

定义:在函数体中引用自身,则称之为递归函数。
直接递归 间接递归
一般形式:

  void  Pname( 参数表 ){ 
    if ( 条件 )   //递归出口
      简单操作;
    else {  简单操作; 
           Pname (实参表); 简单操作; 
           [Pname (实参表); 简单操作;]
    }   //可能有多次的调用
  }

内部实现原理

一般函数的内部实现

在这里插入图片描述

(1) 从程序的执行过程讨论

在执行调用时,计算机内部至少执行如下操作:

  • 保存返回地址,即将返回地址入栈。
  • 为被调子程序准备数据:计算实在参数的值,并赋给对应形参。
  • 转入子程序执行

在执行返回操作时,计算机内部至少执行如下操作:

  • 从栈顶取出返回地址,并且出栈
  • 按返回地址返回

(2)关于局部变量的实现的讨论
在执行调用时,内部操作如下:

  • 返回地址入栈,同时在栈顶为被调过程的局部变量和形参开辟存储空间
  • 为被调子程序准备数据:计算实在参数的值,并赋给对应的形参(在栈顶)
  • 转入子程序执行

(3) 关于返回值的实现的讨论

返回操作的内部实现秀给为如下几项:

  • 如果函数需要求值,将其值保存到回传变量中
  • 从栈顶取出返回地址,并退栈
  • 按照返回地址返回
  • 在返回后自动执行如下操作:如果函数需要求职,从回传变量中取出所保存的值并且传送到相应的变量或者位置上

递归调用的内部实现原理

可以将递归调用理解为调用与自己有相同的代码和同名的局部变量的子程序。

在执行调用时, 计算机内部执行如下操作:
(a)开辟栈顶存储空间,用于保存返回地址、被调层(函数)中的形参和局部变量的值。
(b)为被调层(函数)准备数据:计算实参的值, 并赋给对应的形参(在栈顶元素中)。(c)转入子程序执行。

在执行返回操作时, 内部实现如下:
(a)若函数需要求值,将其值保存到回传变量中。
(b)从栈顶取出返回地址,并退栈(同时撤消被调层子程序的局部变量及形参)。
(c)按返回地址返回。
(d)在返回后自动执行如下操作:若函数需要求值,从回传变量中取出所保存的值并传送到相应的实变参或位置上。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值