JavaScript中的递归
Posted woz333333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中的递归相关的知识,希望对你有一定的参考价值。
JavaScript递归
1.递归定义
递归函数是在一个函数通过名字调用自身的情况下构成的,如下:
1 function factorial(num) {
2 if (num<=1){
3 return 1
4 }
5 else{
6 return num * factorial(num-1)
7 }
8 }
上述函数表明上没有任何问题,但是下面的代码会导致它出错:
1 var anotherFactorial = factorial
2 factorial = null
3 console.log(anotherFactorial(4)) // 出错
出错原因:factorial变量执行上述操作后为空,结果指向原始函数的引用就只剩下一个,但是在接下来的调用anotherFactorial中必须执行factorial,而factorial已经不是函数了,所以就导致错误出现,在这种情况下使用aruguments.callee可以解决这个问题
aruguments.callee:是一个指向函数的指针,因此可以用它来实现对函数的递归调用
1 function factorial(num){
2 if (num <= 1){
3 return 1
4 }
5 else{
6 return num*arguments.callee(num-1)
7 }
8 }
9
10 // 也可以用命名函数表达式实现和上面一样的效果
11 var factorial = ( function f(num){
12 if (num <= 1){
13 return 1
14 }
15 else{
16 return num*f(num-1)
17 }
18 })
2.经典递归
一共10级楼梯,每次可以走一步或两步,求一共多少种走法,思路:
要想走到N(N=10)级,可以分为2种情况。
- 从n-2级迈两步
- 从n-1级迈一步
那么对于n-2和n-1的情况也是各自分为两种,以此类推。
那么走法的和就是n-2的走法和n-1的走法之和。
那么递归到最基本的(当前人在第0阶台阶)
第0阶台阶:0
第1阶台阶:1
第2阶台阶:2(1+1或者2)
得到公式,也就是斐波那契数列。
1 var fib = function (n){
2 if(n == 1){
3 return 1;
4 }
5 else if(n==2){
6 return 2;
7 }
8 else if(n>2){
9 return fib(n-1) + fib(n-2);
10 }
11 }
12
13 console.log(fib(10));
以上是关于JavaScript中的递归的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript - 代码片段,Snippets,Gist