js递归函数0到n的和(js递归实现1到n的阶乘的和)
JS递归的常见用法
求 1-100 的和
1,1,2,3,5,8,13,21,34,55,89...求第 n 项
JS 递归 假如楼梯有 n 个台阶,每次可以走 1 个或 2 个台阶,请问走完这 n 个台阶有几种走法
原理: clone(o) = new Object; 返回一个对象
1、很多时候可以用递归代替循环,可以理解为递归是一种特殊的循环,但通常情况下不推荐这样做。
2、递归一般是在函数里面把函数自己给调用一遍,通过每次调用改变条件,来结束循环。
3、递归在数据格式一致,在数据层级未知的情况下,比普通的遍历更有优势。
4、递归在异步的时候,更容易理解,且更容易实现,因为可以在异步的回调里面,调用自己来实现每次都能拿到异步的结果再进行其他操作。
5、递归实现的快速排序比普通遍历实现的排序效率更好。
js-递归方法
首先先解释一下什么是递归函数:什么是递归方法:就是一个方法,自己调用自己
但是一定要注意控制好合适的跳出,不然就会死循环,如图:
所以我们平时一定要注意,递归函数里调用函数本身的时候一定要要合理的控制循环跳出的语句;比如我们来看一题很经典的面试题,请用递归方法算出1-20之间每个数的和
?function calc(num){
? ? ? ? ? ? //这个if是退出递归的条件
? ? ? ? ? ? if(num===1) {? ? //如果没有这个if条件
? ? ? ? ? ? ? ? return num
? ? ? ? ? ? }
? ? ? ? ? ? return num + calc(num-1)? //
? ? ? ? }
console.log(calc(3))? //这里为了方便我们理解我们可以先用num===3替代进去,具体的方式以及步骤分解可以看图:
如果有大佬有更好的理解方法,可以留言或者私信哦,互相学习,互相进步~~~
在javascript里用函数求从1到任意正整数的和怎么写
上面都是循环加的,我就写个递归的吧
function getSum(n){
if(n==0)
return 0;
return n+getSum(n-1);
}
使用方法:
var num=window.prompt("请输入一个数",100);
num=parseInt(num);
alert(getSum(num));
window.prompt得到的字符串是通过输入确定的,后面的100是默认值,得到的实际是字符串,在数值运算中,字符串和数值得到的结果是不同的.如果想取得转的的数字,需要通过parseInt转换
如何用js求0到任意数的奇数和、偶数和以及累积求和。
这个应该不难,我就喜欢做这样的题
//下面这个是比较傻的算法
var num = 100;
//求奇数和
var sumOdd = (function(){
var i = 0,result = 0;
while(i=num){
result+=i;
i+=2;
}
return result;
})();
window.alert(sumOdd);
//求偶数和
var sumEven = (function(){
var i=1,result = 0;
while(i=num){
result+=i;
i+=2;
}
return result;
})();
window.alert(sumEven);
//求累加和
var sumAll = (function(){
var i=0,result = 0;
while(i=num){
result += i;
i++;
}
return result;
})();window.alert(sumAll);
//上面是比较傻的办法,还有比较快捷的方法,求累加比较快捷的方法
比如从1加到100应该就是(1+100)× (100/2)
对应js应该是:
function sumAll(num){
var sumAll = (num%2==0)?((1+num)*(num/2)):((1+num)*((num-1)/2)+num);
return sumAll;
}
alert(sumAll(100));
同样就奇数和与偶数和也可以简化,不过我得想想才成,以上算是抛砖引玉,看是否能帮到你吧。
js实现递归算法
!DOCTYPE
head
meta content="" charset="utf-8"
title函数的递归调用/title
/head
body
script
//递归的概念:自己调用自己
//注意:使用递归的时候必须有一个结束标志,否则会报内存溢出的错误 Maximum call stack size exceeded;
/* 1.案例一:求1,2,3...n 的和 */
function fn(n){
if(n===1){
return 1;
}
return n+fn(n-1);
}
//console.log(fn(3));
/* 2.案例二:求1,2,3...到n的阶乘 */
function getFactorial(n){
if(n===1){
return 1;
}
return n * getFactorial(n-1);
}
//console.log(getFactorial(3));
/* 案例三:斐波那契数列 *///第n个数等于前两个数的和,除第一个数跟第二个树外:如1,1,2,3,5,8,11,19,30...
function getNFibonacciSequence(n){
if(n===1 || n===2){
return 1;
}
return getNFibonacciSequence(n-1)+getNFibonacciSequence(n-2);
}
console.log(getNFibonacciSequence(4));
/script
/body
/html