js实现递归算法

JavaScript011

js实现递归算法,第1张

<!DOCTYPE >

<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)中去.