递归输出5的阶乘和详解
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>递归输出5的阶乘</title>
<script type="text/javascript">
//递归会先一层一层的调用,然后再一层一层的返回值
function fn(n){
if(n==1){
return 1;
}
return n*fn(n-1);
}
document.write(fn(5));//输出120
/* //递归输出5的阶乘的分解
//当fn(5)调用fn()时,传一个参数5,即函数变为如下
fn(5)//会接收得到fn(5)传过来的值5*4*3*2*1,即5的阶乘120
function fn(5){
if(5==1){
return 1;
}
return 5*fn(5-1);//此处fn(5-1)会再次调用fn(),此时传过去的参数为4
//返回值时会接收到fn(4)返回的值4*3*2*1,此处变为return 5*4*3*2*1;
}
//fn(5-1)调用函数如下
function fn(4){
if(4==1){
return 1;
}
return 4*fn(4-1);//此处fn(4-1)会再次调用fn(),此时传过去的参数为3
//返回值时会接收到fn(3)返回给fn(4-1)的值3*2*1,此处变为return 4*3*2*1;
}
//fn(4-1)调用函数如下
function fn(3){
if(3==1){
return 1;
}
return 3*fn(3-1);//此处fn(3-1)会再次调用fn(),此时传过去的参数为2
//返回值时会接收到fn(2)返回给fn(3-1)的值2*1,此处变为return 3*2*1;
}
//fn(3-1)调用的函数如下
function fn(2){
if(2==1){
return 1;
}
return 2*fn(2-1);//此处fn(2-1)会再次调用fn(),此时传过去的参数为1
//返回值时会接收到fn(1)返回给fn(2-1)的值1,此处变为return 2*1;
}
//fn(2-1)调用的函数如下
function fn(1){
if(1==1){
return 1;//此处把1返回给调用函数fn(2-1),即fn(2-1)=1
}
return n*fn(n-1);//因为上面1==1为真,所以执行return 1;以下代码不再执行
} */
</script>
</head>
<body>
</body>
</html>