<html>
<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>
return的意思就是退出当前函数,并且让函数给出一个值.比如说最简单的,
function func(){
return 1
}
那么调用
alert(func())
自然可以获得1,因为return的时候返回了一个值1,那么退出"func()"这部分计算的时候,就会获得一个1.
只需要牢记这一点就可以很容易的理解递归.
函数内部调用函数,就和普通的函数调用一样,return永远是跳出当前的函数而已,至于跳出去了是什么地方,那要看你是从什么地方"跳进来"这个函数的.
具体到你的例子,这是一个利用递归计算阶乘的函数.无论是否n=1,return都返回到上级函数,也就是调用这个函数的函数.
比如说,计算f(4)的时候会调用到f(3),那么f(3)运行完毕返回的6就会被f(4)中的式子n*f(n-1)所计算,然后继续返回到主程序中.而由于计算f(1)不需要调用任何函数,那么就会直接返回1到调用它的f(2)中去.