企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 函数 我们知道圆的面积计算公式为: ```[math] S=\pi r^2 ``` 当我们知道半径`r`的值时,就可以根据公式计算出面积。假设我们需要计算3个不同大小的圆的面积: ~~~ var r1 = 12.34; var r2 = 9.08; var r3 = 73.1; var s1 = 3.14 * r1 * r1; var s2 = 3.14 * r2 * r2; var s3 = 3.14 * r3 * r3; ~~~ 当代码出现有规律的重复的时候,你就需要当心了,每次写`3.14 * x * x`不仅很麻烦,而且,如果要把`3.14`改成`3.14159265359`的时候,得全部替换。 有了函数,我们就不再每次写`s = 3.14 * x * x`,而是写成更有意义的函数调用`s = area_of_circle(x)`,而函数`area_of_circle`本身只需要写一次,就可以多次调用。 ```js //定义计算圆的面积的函数 function area_of_circle(r) { //实用内置Math库的函数实现 s = Math.PI * Math.pow(r, 2) // s = Math.PI * r * r return s; } ``` ## 抽象 抽象是数学中非常常见的概念。举个例子: 计算数列的和,比如:`1 + 2 + 3 + ... + 100`,写起来十分不方便,于是数学家发明了求和符号∑,可以把`1 + 2 + 3 + ... + 100`记作: ```[math] \sum_{n=1}^{100} {n} ``` 这种抽象记法非常强大,因为我们看到 ∑ 就可以理解成求和,而不是还原成低级的加法运算。 而且,这种抽象记法是可扩展的,比如: ```[math] \sum_{n=1}^{100} {(n^2+1)} ``` 还原成加法运算就变成了: ``` (1 x 1 + 1) + (2 x 2 + 1) + (3 x 3 + 1) + ... + (100 x 100 + 1) ``` 可见,借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题。 ## 作业 编写计算斐波拉切数列的函数。 ```[math] f_0=0,f_1=1 f_n=f_{n-1}+f_{n-2} ```