js中的函数与递归

一、函数

所谓函数就是在程序中封装好的语句。

​ 1、定义:有三种定义方式,声明式定义【函数关键字】、表达式【函数字面量】与构造函数

​ 声明式:

function 函数名(参数1,参数2...){
   执行语句
}

​ 表达式:

let sum = function(){
   执行语句
}

构造函数:

function add(name,age){
   this.name = name;
   this.age = age;
}
let add = new add('li',20);

ps:定义函数时,所用函数中的语句是不执行的;定义函数时,形参前面不需要类型,如var、let,因为在函数内部会隐式定义形参中需要的变量。

调用格式:函数名() 如:sum()

函数的作用:

  • 用于重复调用的语句,在需要的时候可以直接调用

  • 可以通过参数改变结果

  • 把复杂的语句进行分割,方便阅读与修改

    2、参数

    ​ 函数的参数分为形参与实参,在函数调用使用的参数是实参,定义函数时使用的参数是形参

    ​ 如:sum(12,20) // 12与20是实参

    ps:js在函数调动时,形参与实参的个数可以不一致

    function test(a,b){
       console.log(a,b)  //1 2
    }
    test(1,2,3)
    

​ 从上面我们可以看到,虽然实参的个数会多于形参的个数,表示形参与实参个数不一样,并不会报错,它会按照顺序一个一个赋值给形参,若形参多于实参,没被赋值的默认为undefined。 那么我们如果想要获取 3 的值,该怎么获得呢? 其实很简单,js中的函数,在传递参数的时候,内部会构建一个arguments数组,用于存储从函数实参中传递过来的值,该数组中的值会与形参列表相对应,构成映射关系,修改一边的值,另一边也会修改。 如: arguments[0]=>a , arguments[1]=>b , arguments[2] => 3
arguments[1] = 5; //执行该语句后,arguments[1]与b的值均为 5

​ arguments 对应实参列表,arguments.length //实参列表的个数 ,该例子为3

​ 定义函数时,函数的参数,对应形参列表 ,如test.length // 形参列表的个数,该例子为2

3、return

return使用的场景:用于终止函数;提供函数返回值。

二、递归

递归:调用自己本身的函数;
递归总结出来,就两点:找规律;找出口

找规律:相当于数学中的数学公式,通过一定的规律,使用公式表示。

找出口:结束条件,相当于最明显、已知的条件。

使用递归最普遍的例子:阶乘 与 斐波那契数列

1、阶乘:

首先以阶乘为例:容易得出,通过规律,可将求阶乘用公式表示: f(n) = n *(n-1)! , 0!=1, 1!=1

然后我们可以得出 0!=1,1!=1,两者都是很明显的一个已知条件,最后我们便可以得出下面:

function factorial(n){
    if(n == 1 || n == 0){
        return 1;  //出口
    }
    return n * factorial(n-1);
}

2、斐波那契数列:

通过规律得出公式 :f(n) = f(n-1) + f(n-2) n>=3 f(1) = 1; f(2) = 1;

所以可以得出:

function fib(n){
   if(n == 1 || n == 2){
       return 1;  //出口
   }
   return fib(n-1)+fib(n-2);
}

以上文字均为自己在学习时的总结 ,如有错误,或表述不对的地方,请多包涵,ps:可以在评论区交流哟!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值