java递归简单例子_递归函数转非递归(通用方法)[2/2]

71475a862f2182f8b34a82c203a83ce9.png

第一篇探索栈的数据结构:

铭信:递归函数转非递归(通用方法)[1/2]——数据结构​zhuanlan.zhihu.com
7b3abebed018151e5f87750f2a7fa863.png

最终确定函数调用时,开辟的空间如下图所示

23aa9daaf184ffb8fac8235887b52f29.png

在 Java 代码中可以使用 Object[] 表示一个栈帧,因为栈中对象的格式有明确规定,所以可以放心进行转换类型。

阶乘 factorial(int n) 转非递归

先看一个简单的例子,阶乘

int 

为了方便分析,明确指出函数的返回值,并做上 flag 标记,0表示从头开始执行,1标志从第一次函数调用后执行。

int 

可以看到 factorial() 函数接受一个入参 int n,没有局部变量,因此栈帧是

{ 

转换成非递归后,形式如下

e85dd48bede433f816797bdb88786789.png

带有局部变量的情况代码较长,放在 CSDN 中供大家查阅。

递归函数转非递归(通用方法)_madokast信徒避风港-CSDN博客​blog.csdn.net
5d87f9b17e0c5adc41c5b41b59511a3a.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值