递归算法 recursion
来源:互联网 发布:淘宝网汉服 编辑:程序博客网 时间:2024/06/05 06:52
1. 汉诺塔
临界点:最大的盘n要从A移到C,需要将n-1,...,1的盘子都移到B上,然后将A上最大的盘n移到C上,再移动n-1个盘子,
由此可知 H(n) = H(n-1) + 1 + H(n-1) = 2H(n-1) + 1; 则 H(n) = 2^n + 1;
// A B Cfunction Hanoi($n, $from, $assist, $to) { if ($n == 1) { move(1, $from, $to); } else { // 先把n-1个盘子从 A --> B Hanoi($n-1, $from, $to, $assist); // 把最大的n盘从 A --> C move($n, $from, $to); // 把n-1个盘子从 B --> C Hanoi($n-1, $assist, $from, $to); } }function move($n, $from, $to) { echo "{$n}号盘子从 {$from} --> {$to} <br>";}Hanoi(3, 'A', 'B', 'C');// 求最少移动步数function sum($n) { if ($n == 1) return 1; else return 2*sum($n-1) + 1;}echo sum(3);// 尾递归实现function ssum($n, $s=1) { return $n > 1 ? ssum($n-1, 2*$s+1) : $s;}
2. Fibonacci斐波那契数列
--- 不用递归算法实现
// 使用数组function fibonacci($n) { $fb = [1, 1]; for ($i=2; $i<$n; $i++) { $fb[$i] = $fb[$i-1] + $fb[$i-1]; } return $fb[$n-1];}echo fibonacci(5) // 8
3. 递归法求数组中的最大值
--- 性能比循环法慢一倍
function maxss($arr, $low, $high) { if ($low > $high - 2) { $max = $arr[$low] > $arr[$high] ? $arr[$low] : $arr[$high]; } else { $mid = ceil( ($low + $high) / 2); $max1 = maxss($arr, $low, $mid); $max2 = maxss($arr, $mid+1, $high); $max = $max1 > $max2 ? $max1 : $max2; } return $max;}echo maxss($arr, 0, count($arr)-1);
0 0
- 递归算法Recursion
- Recursion 递归算法
- 递归算法Recursion algorithm
- 递归算法 recursion
- 递归算法-recursion
- 递归算法(recursion algorithm)
- 数据结构与算法5: 递归(Recursion)
- 【算法】递归(recursion)+经典例题个人分析
- 递归 recursion
- Recursion--递归
- 八、递归 ( recursion)
- 尾递归 - Tail Recursion
- 尾递归 tail recursion
- Java_递归—Recursion
- Tail Recursion 尾递归
- 递归(recursion)
- 递归(Recursion)
- 递归法(Recursion)
- jquery.autocomplete.js 插件的自定义搜索规则
- 20151210编译高通的qca9531的wireless版本 修改版本4
- JavaEE_post乱码和乱码的解决方法
- 装饰者设计模式的使用
- opencv源码解析之(6):hog源码分析
- 递归算法 recursion
- Nodejs源码解析之module
- sqlite数据库增上该查
- ViewRotImpl
- 安卓必备五个常用代码片段整理
- listView中添加checkBox按键,点击是否选中处理。
- 锐捷网络频繁掉线
- yii2安装(windows & linux)
- iOS开发之自定义NSOperation