如何将递归函数转化为非递归函数

地市其实递归函数的特点,是自己调用自己,其实就是代码逻辑复用。

函数常常作为代码逻辑复用的最小单位,但是实际上循环也是一种逻辑复用的方式。那函数和循环有什么差别呢?函数是相对封闭的,局部变量是不能相关访问的,函数能够有参数传递。局部变量不能访问,但是循环中也可以构造局部变量,唯一不同的地方就是参数传递,因此如果将递归转成非递归,需要将传递的参数先保存下来,再在下一次的循环中使用。比如可以使用队列、树和堆等形式进行存放,存放的地形决定了参数进入和弹出的逻辑,也就对应不同的递归方式。


比如快速排序,递归写法:

quicksort(l,r){

  if (l<=r) return;

  i=partition(l,r);

  quicksort(l,i);

  quicksort(i+1,r);

}

非递归写法

quicksort(l,r){

  if (l<=r) return;

  list  list;

  list.pushback(l,r);

 for (list.size()>0) {

  (l,r)=list.pop;

  i=partition(l,r);

  if(i>l)  list.pushback(l,i);

 if(i+1<r)  list.pushback(l,i);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值