欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

js中递归函数的经典案例

程序员文章站 2022-09-14 10:30:53
递归函数什么是递归函数?关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。用递归需要注意以下两点: (1) 递归就是在过程或函数里调用自身。 (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。简洁的来说:一个函数可以调用其他函数。如果函数在内部调用他自己本身 ,那么这个函数就叫递归函数递归函数的作用:下面举个例子:...

javascript中递归函数的经典案例

什么是递归函数?

关于递归的概念,我们都不陌生。简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。用递归需要注意以下两点:
 (1) 递归就是在过程或函数里调用自身。
 (2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
js中递归函数的经典案例

简洁的来说:一个函数可以调用其他函数。如果函数在内部调用他自己本身 ,那么这个函数就叫递归函数

递归函数的作用:

下面举个例子:计算1~10的累加和1+2+3…+10.

 计算1~10的累加和。
 
	分析一到十的累加和===>
	1、add(10)为一到十的累加和;
	add(10)=10+9+8+7+6+5+4+3+2+1;
	那我们可不可以写成这样:add(10)=10+add(9);
		       ==>同理:  add(9)=9+add(8);
               			  add(8)=8+add(7);
               		    	.......
              			 add(3)=add(2)+3;
                         add(2)=add(1)+2;
                         add(1)=add(0)+1; 

         由此我们可以得出:add(n)=add(n-1)+n;    
         add(0)为多少呢?是不是等于0,依次我们可以求的add(1)=1
 			  ==>即求的add(1)、add(2)、add(3)....add(10)
                                                 

声明函数如下:

 //申明一个add函数
        function add(n){
            // 当n==1时写下其边界值为1
            if(n===1){
                return 1;
            }else{                  //条件不为1时,调用自身函数
                return add(n-1)+n;      //其关系条件为:add(n)=add(n-1)+n;
            }
        }
         var result = add(10);  // 将add为10的值赋值给result;
        console.log(result);    //控制台输出result;

输出结果为:

55

从上面两中方法的对比可以看出,递归函数的作用和循环的方法效果一样,即递归函数本质上是一个方法的循环调用, 注意:有可能会出现死循环。因此,使用递归函数的时候,一定要定义递归的边界(即什么时候退出循环)。

递归函数的另一个案例是斐波纳契数列

斐波纳契数列:1、1、2、3、5、8、13。。。(该数列中,第三个数开始:数值=前面第一个数字+前面第二个数字)即,n=(n-2)+(n+1)

//综上所述、我们发现以下规律:
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2);

即函数申明如下:

//声明斐波纳契数列函数
function fibonacci(n){
			//当n==1时值
            if(n==1){
                return 1;
            }
            //当n==2时值
            if(n==2){
                return 1;
            }
            return fibonacci(n-1)+fibonacci(n-2);
        }
        //返回函数为7赋值给result;
        var result = fibonacci(7);
        //控制台输出
        console.log(result);

输出结果为:

13

以上两个案例是递归的经典案例。

来源于知乎?
递归的三大要素
第一要素:明确你这个函数想要干什么
对于递归,我觉得很重要的一个事就是,这个函数的功能是什么,他要完成什么样的一件事,而这个,是完全由你自己来定义的。也就是说,我们先不管函数里面的代码什么,而是要先明白,你这个函数是要用来干什么。
第二要素:寻找递归结束条件所谓递归,就是会在函数内部代码中,调用这个函数本身,所以,我们必须要找出递归的结束条件,不然的话,会一直调用自己,进入无底洞。也就是说,我们需要找出当参数为啥时,递归结束,之后直接把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接知道函数的结果是什么。
第三要素:找出函数的等价关系式第三要素就是,我们要不断缩小参数的范围,缩小之后,我们可以通过一些辅助的变量或者操作,使原函数的结果不变。例如,f(n) 这个范围比较大,我们可以让 f(n) = n * f(n-1)。这样,范围就由 n 变成了 n-1 了,范围变小了,并且为了原函数f(n) 不变,我们需要让 f(n-1) 乘以 n。说白了,就是要找到原函数的一个等价关系式,f(n) 的等价关系式为 n * f(n-1),即f(n) = n * f(n-1)。

递归的用途

递归一般用于解决三类问题:
  (1)问题解法按递归实现。(回溯)
  (2)数据的定义是按递归定义的。(Fibonacci函数,n的阶乘)
  (3)数据的结构形式是按递归定义的。(二叉树的遍历,图的搜索)

递归的缺点

递归的思想与循环有着类似的思想,但我们很少用,因为其:运行效率较低可能出现死循环。 因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。

结语

即我们是不是对递归函数有了一定的理解,那我们如果想要了解更多的前端知识可以打开链接,进入我们的快乐学习之旅!
链接: 前端学习网站.

本文地址:https://blog.csdn.net/yzhlove_cs/article/details/107280178