<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
// js 递归
// 递归就是函数自己调用自己,一点要有结束条件
// 需求 从1+2+..5; 1+2+3+4+5=15
function add(n){
// 如果n是1直接返回(递归函数的结束条件)
if(n==1){return 1};
return n+add(n-1);
}
console.log(add(4))
// alert(add(5)) //15
// 01 5+add(4)
// 02 5+4+add(3)
// 03 5+4+3+add(2)
// 04 5+4+3+2+add(1);
// 05 5+4+3+2+1;
// 需求 1*2*3*...10用递归如何写呢
// 斐波拉契数列
// 求斐波拉契第n为数的数列
// 下一个数等于前面两个数之和,第0位和第1位返回的是1
// 1,1,2,3,5,8,13,21,34,55,89
function fib(n){
// 如果是第0位返回1 如果是第1位返回1
if(n==0||n==1){return 1}
else{
// 如果其他位 返回 前面两个数的和
return fib(n-1)+fib(n-2);
}
}
// alert(fib(41));
// n = 2 return fib(1)+fib(0)
// n = 2 return 1+1; = 2
// n = 3 return fib(2) +fib(1)
// n = 3 2+1
// n = 4 return fib(3)+fib(2)
// n = 4 3+2
function getFib(n){
// 如果小于1返回1
if(n<=1){
return 1
}else{
// 做数组arr
var arr = [1,1];
// 从第2位开始算
for(var i=2;i<=n;i++){
// 第n位数是前面两个数的和
arr.push(arr[i-1]+arr[i-2]);
}
// console.log(arr);
// 返回最后一个(删除并返回最后一个)
return arr.pop();
}
}
// 50以上的数字 慎用,可能需要几分钟
alert(getFib(45));
// alert(fib(45))
</script>
</body>
</html>