函数的定义与调用
函数是什么?怎么用?
定义:function isPrime(n){
......
}
function定义函数的关键字
isPrime是函数名字,和变量名一样的命名规则和原则
n形式参数(形参)
isPrime(12),12就是实际参数(实参)
函数头部:体现的是函数的设计(function isJiaogu(n){)
函数体:体现的是函数的实现过程(function isJiaogu(n){函数体})
设计比实现更重要
案例一:验证100以内的数都符合角谷定理
var flag = true;
for(var n = 2;n <= 100;n++){
if(!isJiaogu(n)){
flag = false;
}
}
alert("角谷定理验证" + (flag?"成功":"失败"));
function isJiaogu(n){
while(n != 1){
if(n % 2 == 0){
n /= 2;
}else{
n = n * 3 + 1;
}
}
return true;//角谷定理肯定可以得到1
}
案例二:验证10000以内哥德巴赫猜想成立
假设系统有一个函数能帮我们判断大于6的偶数能否分解的;
设计一下该函数。
var flag = true;
for(var n = 6;n <= 10000;n += 2){
if(canSplit(n)){
flag = false;
break;
}
}
alert("哥德巴赫猜想验证" + (flag?"成立":"不成立"));
功能:判断一个数能否分解为两个素数之和
1.函数名:canSplit
2.传入参数:待分解的数n
3.输出结果:true/false
var flag = true;
for(var n = 6;n <= 10000;n += 2){
if(!canSplit(n)){
flag = false;
break;
}
}
alert("哥德巴赫猜想验证" + (flag?"成立":"不成立"));
那么如何实现呢?好像还不够简单,那就继续分。
如果系统有一个能判断素数的函数,那这个问题也简单。
设计函数:
1.功能:判断一个数是否为素数
2.名称:isPrime
3.输入参数:待判断的数
4.输出结果:true/false
function isPrime(a){
var m = Math.ceil(Math.sqrt(a));//根据数学相关定理,查找范围可缩小至[2,sqrt(n)]
for(var i = 2;i <= m - 1;i++){
if(a % i == 0){
return false;
}
}
return true;
}
函数的本质:
直观理解就是实现某个独立功能的代码段,或者说它就是一个数据加工的黑箱子。
所谓“黑箱子”,就是我们只关心外面的东西,比方说它是干什么的,需要输入什么,可以得到什么结果,而不关心里面是怎么工作的。
忽略实现细节