博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法初探——递归算法
阅读量:5797 次
发布时间:2019-06-18

本文共 979 字,大约阅读时间需要 3 分钟。

递归算法

什么是递归算法?

简单的理解就是,函数里面直接或者间接的调用函数本身.

递归函数的特点

1.函数累不调用本身

2.需要有明确的结束条件,不然容易造成死循环.
3.递归函数的代码固然简洁,但是执行效率较低,需要结合自己的需求制定相应的算法,不推荐使用递归.
4.递归函数的执行顺序依次是从外部执行到最里层,当满足限制条件的时候,依次从内部执行到最外层.

算法实战  

需求

使用递归函数和栈逆序一个栈(只能使用栈一种数据结构)

解题思路(两个递归函数)

1.获取一个栈的栈底元素删除并且返回最底层元素.

2.利用1种的递归函数,逆序这个栈

逻辑代码
/** * 获取并且删除栈的最后一个元素 */function getAndRemoveLastElement (&$stack){    // 弹出最外层的元素.    $element = array_pop($stack);    if (!empty($stack)) {        $last = getAndRemoveLastElement($stack);        array_push($stack,$element);        return $last;    } else {        // 递归的结束条件,栈为空.        return $element;    }}
/** * 逆序这个栈. * @param $stack */function reverse (&$stack){    // 递归退出的限制条件.    if (!empty($stack)) {        $i = getAndRemoveLastElement($stack);// 未符合现在条件时,依次从外到里面执行.        reverse($stack); // 符合限制条件后依次从里到外向下执行.        array_push($stack,$i);    } else {        // 为空就返回.        return ;    }}

输出为

array(5) {  [0]=>  int(5)  [1]=>  int(4)  [2]=>  int(3)  [3]=>  int(2)  [4]=>  int(1)}

转载地址:http://cvsfx.baihongyu.com/

你可能感兴趣的文章
微信公众号
查看>>
Android_内部文件读取
查看>>
QTP的那些事---webtable的一些重要使用集合精解
查看>>
POJ1061 青蛙的约会(扩展欧几里得)题解
查看>>
关于Android studio团队协同开发连接到已有项目
查看>>
Sql获取表的信息
查看>>
Java-大数据-图汇集
查看>>
一、数论算法
查看>>
Asp.net MVC 中Controller的返回类型大全
查看>>
php7.1安装
查看>>
用一条SQL语句实现斐波那契数列
查看>>
[高中作文赏析]跋涉与成功
查看>>
swift-辞典NSDictionary定义,变化的关键,删/加入关键
查看>>
python----slots属性安全类
查看>>
《Programming WPF》翻译 第5章 1.不使用样式
查看>>
.NET垃圾回收:非托管资源,IDispose和析构函数的结合
查看>>
H2内存数据库 支持存储到文件
查看>>
css3处理sprite背景图压缩来解决H5网页在手机浏览器下图标模糊的问题
查看>>
BlockCanary 一个轻量的,非侵入式的性能监控组件(阿里)
查看>>
【HDU 1228】A + B
查看>>