斐波那契数列
需求:有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑起一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第三个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么一对兔子一年内(12个月)能繁殖成多少对?
每月兔子数:1,1,2,3,5,8,13,21,34,55,89,144
斐波那契数列的规律:第一项 + 第二项 = 第三项
伪代码:
从第三个月开始
var num1 = 1; //第一个月
var num2 = 2; //第二个月
var sum = num1 + num2; //第三个月
第四个月
var num1 = num2; //第二个月
var num2 = sum; //第三个月
var sum = num1 + num2; //第四个月
第五个月
var num1 = num2; //第三个月
var num2 = sum; //第四个月
var sum = num1 + num2; //第五个月
代码:
var num1 = 1;
var num2 = 1;
var sum = 0;
for(var i = 3; i <= 12; i++){
sum = num1 + num2;
num1 = num2;
num2 = sum;
}
console.log(sum);
注:每三个为一组,第一组三个一月,二月,三月、第二组三个二月,三月,四月、第三组三个三月,四月,五月,以此类推。所以num1,num2,sum的值都要传到下一个月,进行新的一组
arguments
arguments——伪数组
求N个数字和 arguments可以获取到用户传递的数据
function fun(){
console.log(arguments.length);
}
fun(10,20,30,40,50); //5个参数
需求:通过arguments来计算求和
function getSum(){
var sum = 0;
for(var i = 0; i < arguments.length; i++){
sum += arguments[i]; //用到伪数组里面的数
}
return sum;
}
var result = getSum(10,20,30);
console.log(result); //60
匿名函数——没有名字的函数
var f1 = function(){ //f1为变量名
console.log("匿名函数");
}; //加上;
f1(); //调用函数
函数的自调用——函数自己调用自己,自执行函数
用处:js初始化,可以用自调用函数,不用考虑重名问题,函数可以直接自己执行
(function(){
console.log("我是自执行函数");
})();
练习:
需求:用函数封装斐波那契数列
function getFib(num){
var num1 = 1;
var num2 = 1;
var sum = 0;
for(var i = 3; i <= num; i++){
sum = num1 + num2;
num1 = num2;
num2 = sum;
}
return sum;
}
var result = getFib(12);
console.log(result);
需求:定义一个函数输入某年某月某日,判断这一天是这一年的第几天
假设输入2022-2-18则输出49
function getDays(year,month,day){
var days = day; //先定义一个变量来存储天数
if(month == 1){ //此时表示1月
return days; //遇到return代码停止,后面就不再执行了
}
// 定义一个数组来存储每个月的天数
var months = [31,28,31,30,31,30,31,31,30,31,30,31];
for(var i = 0; i < month - 1; i++){ //输入的月数-1
days += months[i];
}
return days;
}
var result = getDays(2021,2,18);
console.log(result); //49