关于递归的一点点小偷学
来源:互联网 发布:狙击手幽灵战士2优化 编辑:程序博客网 时间:2024/06/06 01:34
迭代为人 递归为神
虽然代码看着美 但是我暂时觉得递归只适合去解决特殊的问题 比如树状
以下为转载内容 转自 大神 ''快乐的程序媛'' 侵删
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)
得到公式,也就是斐波那契数列。
(看到这里真的忍不住叫了一声厉害,美到没朋友)
Question3—1个细胞,一个小时分裂一次,生命周期是3小时,求n小时后容器内,有多少细胞。
思路:
细胞的生存周期是3个小时,那我们就可以把细胞在题目中状态分为以下几个状态:
- a:刚分裂态——由前一小时的a,b,c分裂出
- b:分裂1小时态——由前一小时a长成
- c:分裂2小时态——由前一小时b长成
- d:分裂3小时态——死亡的细胞。由前一小时c长成,和之前的d一起组成。
那么,我们就可以根据细胞状态设定函数。分析每一个状态的来源是哪里即可。
容器中存活的细胞数目就是a、b、c三种状态数量的总和。
ps: 曾经看到一句描述递归的话 个人感觉算是在白话中比较好理解的
叫"包子馅的包子"叫递归极限了 就是"馒头" 但是我觉得这个馒头谁也啃不动,类似死循环;
而且内存会溢出? 最近没有对内存进行学习 先存疑 只是看到了网上的各位大神在写递归的时候多多少少都会提出内存的问题;
阅读全文
0 0
- 关于递归的一点点小偷学
- 关于小偷程序的看法
- 关于创业的一点点
- 关于Collection的一点点
- 今天学了一点点的东西
- 一点点的社会经济学和组织领导学
- 关于败家的一点点感悟
- 关于Enumeration的一点点学习体会。。。
- 关于人生的一点点思考
- 关于latch的一点点理解
- 关于指针的一点点感受
- 关于CSS的一点点总结
- 关于MapWinGis的一点点了解
- 关于中断的一点点认识
- 一点点关于找工作的体会
- 关于校内的一点点想法
- 关于异常的一点点小结
- 关于技术交流的一点点看法
- 图像时域变换(一)
- IO流
- 9-24 DAIRY
- ???Line Segments Clipped by Windows
- android 获取网页代码显示TextView中
- 关于递归的一点点小偷学
- Android studio入门1
- vue.js展示AJAX数据简单示例
- 【强化学习】QLearning
- 海量数据实时OLAP分析系统-Druid.io安装配置和体验
- Android N BSP中如何配置native library 可以被第三方App加载
- 第四周项目2—建设“单链表”算法库
- Window+Anaconda3+TensorFlow少挖坑安装
- ???The Heaviest Non-decreasing Subsequence Problem