<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>
其实难点就在于对递归函数的理解。所谓递归函数,就是函数在执行时调用自己。程序在调用一个函数时,首先执行这个函数的程序,执行完毕后返回到原调用前的上一级程序继续运行这一级程序。调用递归函数也是如此,在执行完递归函数,得到3之后,它要退出递归函数回到调用它的原来的主程序继续去执行原来的主程序。由于调用递归函数时程序是逐级进行的,所以返回时也是逆向逐级执行程序并返回的,即在得到3后,返回上一级执行这一级的程序就得到4(即再次执行document.writeln(num1)),再返回上一级执行这一级的程序得到5(即再次执行document.writeln(num1))。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)