几个经典递归问题用js实现
来源:互联网 发布:js做99乘法表 编辑:程序博客网 时间:2024/05/22 13:09
Question1—Fibonacci数列第N项
var fib = function (n){ if(n<=2){ return 1; } return fib(n-1) + fib(n-2); }console.log(fib(5));上面是递归实现。
var fib = function (n){ var a1=1,a2=1,a3=0; if(n<=2){ return 1; } for(var i = 0;i < n-1;i++){ a3 = a1 + a2; a1 = a2; a2 = a3; } return a3; }console.log(fib(5));上面是循环实现。
Question2—一共10级楼梯,每次可以走一步或两步,求一共多少种走法。
思路:
要想走到N(N=10)级,可以分为2种情况。
- 从n-2级迈两步
- 从n-1级迈一步
那么对于n-2和n-1的情况也是各自分为两种,以此类推。
那么走法的和就是n-2的走法和n-1的走法之和。
那么递归到最基本的(当前人在第0阶台阶)
第0阶台阶:0
第1阶台阶:1
第2阶台阶:2(1+1或者2)
得到公式,也就是斐波那契数列。
var fib = function (n){ if(n == 1){ return 1; }else if(n==2){ return 2; }else if(n>2){ return fib(n-1) + fib(n-2); }}console.log(fib(10));
Question3—1个细胞,一个小时分裂一次,生命周期是3小时,求n小时后容器内,有多少细胞。
思路:
细胞的生存周期是3个小时,那我们就可以把细胞在题目中状态分为以下几个状态:
- a:刚分裂态——由前一小时的a,b,c分裂出
- b:分裂1小时态——由前一小时a长成
- c:分裂2小时态——由前一小时b长成
- d:分裂3小时态——死亡的细胞。由前一小时c长成,和之前的d一起组成。
那么,我们就可以根据细胞状态设定函数。分析每一个状态的来源是哪里即可。
容器中存活的细胞数目就是a、b、c三种状态数量的总和。
var afib = function (n){ if(n===0){return 1;} //初始的那个细胞 return afib(n-1)+bfib(n-1)+cfib(n-1);}var bfib = function(n){ if(n===0){return 0;} //一个小时之后才会生成 return afib(n-1);}var cfib = function(n){ if(n===0||n===1){return 0;} //前两小时还没生成 return bfib(n-1);}var time = 3;console.log(afib(time)+bfib(time)+cfib(time));
总结:
递归的两个必要因素:
递归方程,递归结束条件。
算法核心:
- 在有限次可预见性结果中,找到结果与上一次结果之间的关系。
- f(n)与f(n-1)的关系有时候很简单,如同走楼梯,状态单一;又有时如同细胞分裂,多种状态组合影响结果。
- 关键在于梳理清楚本次结果和上一次结果的关系有哪些方面或是因素。
- 在草稿纸上写出前几次的结果,或者画图,这样更容易找到规律,这种规律实际上就是递归方程。
- 在算法的分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化成为一个递归方程的求解。
阅读全文
0 0
- 几个经典递归问题用js实现
- 经典汉诺塔问题:分别用递归和非递归实现
- 经典递归问题:汉诺塔(PHP实现)
- 经典递归解决汉诺塔问题 python实现
- 经典汉诺塔问题——递归实现
- 递归的几个经典例子
- 几个用递归实现的简单程序
- JS实现递归要注意的问题
- 几个经典问题
- 经典递归问题--汉诺塔
- 经典递归问题总结
- 四大经典递归问题
- 经典递归问题
- 经典递归问题
- 经典递归问题集锦
- 递归经典问题详解
- 经典递归问题--汉诺塔
- 经典汉诺塔递归问题
- 【KMP求字符串第一个匹配位置】hdu 1711
- LinkedHashMap和HashMap的比较使用
- VirtualBox下CentOS 7+ssh+samba
- 2017暑期集训——Wet Shark and Bishops(思维)
- HDU 2044 一只小蜜蜂...(DP递推)
- 几个经典递归问题用js实现
- 远程启动VMware并连接虚拟机
- Linux/Android系统知识之Linux入门篇--学习使用命令行
- Altium Designer 集成库的创建
- JMS--队列模式代码实现 (二)
- 八皇后问题(回溯法)
- poj1459 Power Network题解
- Android View框架的layout机制
- 关于#if #endif