递归算法学习

核心:

所谓的递归函数就是在函数体内调用本函数。

注意问题:

使用递归函数一定要注意,处理不当就会进入死循环。递归函数只有在特定的情况下使用 ,比如阶乘问题

//递归算法测试 10的阶乘
function f(num){if(num<1){return 1;}else{return f(num-1)*num;}
}
console.log("10!的结果为:"+f(10));

某大公司的面试题之一


//请实现一个fibonacci函数,要求其参数和返回值如下所示:
/***@desc: fibonacci*@param: count {Number}*@return: result {Number} 第count个fibonacci值,计数从0开始fibonacci数列为:[1, 1, 2, 3, 5, 8, 13, 21, 34 …]则getNthFibonacci(0)返回值为1则getNthFibonacci(4)返回值为5*/
var getNthFibonacci = function (Num) {var count = parseInt(Num);if (isNaN(count) || count < 0)return 0;if (count <= 1)return 1;return getNthFibonacci(count-1) + getNthFibonacci(count-2);
};
//获取fibonacci数组的第 N 个值:索引从0开始
console.log(getNthFibonacci(4));
//从第一个开始打印fibonacci数列,长度是10
var arr = [];
for (let i=0 ; i<10; i++ ){arr.push(getNthFibonacci(i))
}
console.log("[ fibonacii length=10 ] = ",arr);

 某大公司的面试题之二

//一共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));

  某大公司的面试题之三

//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));

总结:

递归的两个必要因素:

  1. 递归方程,即由需求抽象出来的一个,类似数学上的通用公式如fn(n) = fn(n-1) + fn(n-2)。
  2. 递归结束条件,即阻止递归方程无限的循环下去。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/413462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript与php与python的函数写法区别与联系

1、javascript函数写法种类&#xff1a; &#xff08;一&#xff09;、第一种 function test(param){return 111; } &#xff08;二&#xff09;、第二种 var test function(param){return 222; }备注&#xff1a;小程序里面是 param&#xff1a;function&#xff08;&#x…

[css] 如何使用css实现鼠标跟随?

[css] 如何使用css实现鼠标跟随&#xff1f; 铺满元素,hover box-shadow个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

小程序加载思源黑体

思源黑体 CN&#xff08;Source Han Sans CN&#xff09;下载链接 放在app.js的onLaunch方法里一次加载 const util require(utils/util.js);App({onLaunch: function () {//加载思源黑体util.getFontFamily();}, })//这个方法建议放到公共文件中&#xff0c;例如我这里是uti…

小程序自带git方法提交时文件冲突的解决

此方式适合不太懂操作git的朋友。 小程序自带的git版本管理如图 git提交代码的正常流程&#xff1a; 先 commit&#xff08;提交&#xff09; 再pull&#xff08;拉取&#xff09;最后push&#xff08;推送&#xff09; 冲突一定是出现在pull&#xff08;拉取&#xff09;后…

[css] 能不能使用纯css使你的浏览器卡死?怎么实现?

[css] 能不能使用纯css使你的浏览器卡死&#xff1f;怎么实现&#xff1f; 可以&#xff0c;用计算属性calc&#xff0c;变量个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

java算法之冒泡排序

所有的冒泡排序算法都是一样的&#xff1a; 冒泡排序可以分为两种情况&#xff1a; 一种是将无序序列排序为由小到大的升序方式&#xff1a; 另一种情况是将无序序列转化成一种由大到小的降序排列&#xff1a; 转载于:https://www.cnblogs.com/fengjunhua/p/9536952.html

[css] 为什么说对opacity进行动画要比box-shadow进行动画性能更好呢?

[css] 为什么说对opacity进行动画要比box-shadow进行动画性能更好呢&#xff1f; opacity的动画过程既不会影响布局&#xff0c;也不需要重绘个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 …

appium学习记录1

xpath定位: 语法 driver.find_element_by_xpath("//android.widget.EditText[index"登陆"/../preceding-sibling::*[index4]") 语法解释 //android.widget.EditText 表示匹配在文档流匹配android.widget.EditText 其中向服务器发送index"登陆的属性 …

微信小程序的userInfoReadyCallback理解

首先小程序的执行顺序是&#xff1a;app.onLaunch--->page.onLoad 关于userInfoReadyCallback要明确三点&#xff1a; userInfoReadyCallback这个方法是在page.onload中定义的。 如果userInfoReadyCallback方法被定义了&#xff0c;则说明page.onload比当前方法运行的早…

[css] 请问class与[class=xxx]的区别是什么?两者是否等价?

[css] 请问class与[classxxx]的区别是什么&#xff1f;两者是否等价&#xff1f; 不等价 class是类选择器&#xff0c;可以作用于任何dom元素 [classxxx]是属性选择器 只能作用于特定类型的dom元素个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&am…

油田 (Oil Deposits UVA - 572)

题目描述&#xff1a; 原题&#xff1a;https://vjudge.net/problem/UVA-572 题目思路&#xff1a; 1.图的DFS遍历 2.二重循环找到相邻的八个格子 AC代码&#xff1a; 1 #include <iostream>2 #include <cstring> 3 using namespace std;4 5 const int maxn 105 ;…

微信小程序获取当前时间戳、获取当前时间、时间戳加减

题外话&#xff1a; 《Pi Network 免费挖矿国外热门项目 一个π币大约值3元到10元》相信过去BTC的人&#xff0c;信不信未来的PI&#xff0c;了解一下&#xff0c;唯一一个高度与之持平的项目 //获取当前时间戳 var timestamp Date.parse(new Date()); timestamp timesta…

[css] 有哪些标签是不支持伪元素的?

[css] 有哪些标签是不支持伪元素的&#xff1f; 首先我们要知道伪元素有哪些&#xff1a; ::after ::before ::first-letter ::fist-line &#xff08;单双冒号皆可&#xff09; ::selection ::backdrop &#xff08;仅双冒号&#xff09; 伪元素虽然强大&#xff0c;但是还是…

hadoop 常用hdfs命令

转载于:https://www.cnblogs.com/mahailuo/p/9542654.html

PHP API接口GETPOST请求封装(通用)

GET /*** 通过URL获取页面信息* param $url 地址* return mixed 返回页面信息*/ function get_url($url) {$ch curl_init();curl_setopt($ch, CURLOPT_URL,$url); //设置访问的url地址curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_SSL_VERIFYH…

[css] 如何重写行内样式?方法有哪些(至少两种)?

[css] 如何重写行内样式&#xff1f;方法有哪些&#xff08;至少两种&#xff09;&#xff1f; 1, !important 最高级 2, var divStyle document.querySelector(#div).style; 修改属性个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; …

css权重核心概念

1. 权重概念&#xff1a; 权重&#xff0c;是一个相对的概念&#xff0c;是针对某一指标而言。某一指标的权重是指该指标在整体评价中的相对重要程度。 权重系数&#xff0c;是表示某一指标项在指标项系统中的重要程度&#xff0c;它表示在其它指标项不变的情况下&#xff0c;这…

[css] 用css3画出一个立体魔方

[css] 用css3画出一个立体魔方 <!DOCTYPE html> <html> <head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><title>立方体</title><style>.box{width: 300px;he…

Qt的简单介绍,发展和由来

一.Qt的介绍 1. Qt是图形用户界面程序框架&#xff0c;也可以称作Qt库&#xff0c;能做界面的还有MFC(只能在windows下使用)&#xff0c;GTK 2. Qt的由来和发展 1. Qt的历史&#xff1a; Qt是1991年奇趣科技公司&#xff08;2008 年 6 月被诺基亚收购&#xff09;开发的一个跨平…

[css] 举例说明shape-outside的属性的用途有哪些?

[css] 举例说明shape-outside的属性的用途有哪些&#xff1f; shape-outside定义了一个可以是非矩形的形状&#xff0c;相邻的内联内容应围绕该形状进行包装。比如使用 shape-outside: circle(); 属性可以实现文字圆形环绕图片的效果。个人简介 我是歌谣&#xff0c;欢迎和大…