js中实现阶乘(多种⽅法)以及阶乘求
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。 blog.csdn/Bug_money/article/details/79156992
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "/TR/html4/loose.dtd">
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>阶乘五种计算⽅法</title>
<script type="text/javascript">
/*use strict*/
/* ⽅法⼀ 尾递归的优化*/
//构建⼀个带尾递归的函数。因为它会返回⾃⾝调⽤的结果,所以它是尾递归
//JavaScript 当前没有对这种形式的递归做出优化
var factorial = function factorial(i,a){
console.log(i,a);
a = a || 1;
console.log(i,a);
if(i<2){
return a;
}
// return factorial(i-1,a*i);
return factorial(i-1,a*i);
};
console.log("这是上⾯4的阶乘:",factorial(4));
js arguments
/*⽅法⼆*/
// ⽤arguments.callee可以不⽤管函数名变还是不变都可以⽤
function fac(num){
if(num<=1){
return 1;
}else{
// 闭包
return num*fac(--num); //⽅法⼀
//return num*fac(num-1); //⽅法⼆
/
/ return num*arguments.callee(num-1);//⽅法三
// return num*arguments.callee(--num);//⽅法四
/*但在严格模式下不能通过脚本访问arguments.callee*/
}
}
var result = fac(4);
console.log("这是下⾯4的阶乘:",result);
// ⽅法三
var factorial = function fac(num){
if(num<=1){
return 1;
}else{
// 闭包
return num*fac(num-1);
}
}
var result = factorial(4);
console.log("这是最后下⾯4的阶乘:",result);
// ⽅法四
function fac(n){
return n>1? n*fac(n-1):1;
}
console.log("⽅法四结果",fac(4));
// ECAMscript不存在块级作⽤域在循环内部定义的变量也可以在外部访问
// JS 确实有函数作⽤域【但不存在块级作⽤域】。那就意味着定义在函数中的参数和变量在函数外部是不可见的。⽽在⼀个函数内部任何位置定义的变量,在
该函数的内部任何地⽅都可见。
//⽅法五 for循环 (使⽤循环语句)
function test1(num){
for(var i=num-1;i>=1;i--){
num *=i;
}
return num;
}
console.log("for循环递归",test1(5));
// ⽅法六 white循环
function test2(num){
var result = num;
while(num>1){
num--;
result *=num;
}
return result;
}
console.log("while循环递归",test2(4));
/
/5的阶乘求和
function test3(num){
var n=num;
var total = 0;
for(var i=1;i<=n;i++){
var temp = 1;
for(var j=i;j>=1;j--){
temp *=j;
}
total += temp;
}
return total;
}
console.log("5的阶乘总和为",test3(5))
/* label 标识
使⽤label可以在代码中添加标签,以便将来使⽤label : for(int i=0;i<10;i++){
if(i == 5){
break label;
}
}
循环关键字
break 跳出循环体
continue 结束本次循环,进⾏下⼀次循环*/ </script>
</head>
<body>
</body> </html>

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。