函数练习
//判断一个数是否是素数
//质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。
function isPrime(num){
if(typeof num !=="number" || num<=1 || num%1 !== 0){
console.log("咱能正常传个大于1的自然数麽");
return false;
}
var isZS=true;//假设是素数
for(var i=2;i<=Math.sqrt(num);i++){
if(num%i===0){//除尽不是素数
isZS = false;
}
}
return isZS;//返回布尔值
}
console.log(isPrime(1.1))//false
console.log(isPrime(23))//true
//求阶乘
function getJC(num){
if(typeof num !=="number" || num<0 || num%1 !== 0){
console.log("咱认真的传传值可以伐");
return false;
}
var sum = 1;
for(var i=2;i<=num;i++){
sum*=i;
}
return sum;
}
console.log(getJC(0))//1
console.log(getJC(1))//1
console.log(getJC(2))//2
console.log(getJC(3))//6
//求0!+1!+2!+3!+...+n!
function getSumJC(n){
if(typeof n !=="number" || n<0 || n%1 !== 0){
console.log("咱认真的传传值可以伐");
return false;
}
var sum = 1;
for(var i = 1;i<=n;i++){
sum+=getJC(i)
}
return sum;
}
console.log(getSumJC(0))//1
console.log(getSumJC(1))//2
console.log(getSumJC(2))//4
//求斐波拉契数列Fibonacci中的第 n个数是多少?
//1 1 2 3 5 8 13 21 ...
function Fibonacci(n){
var n1=1;
var n2=1;
var num = 1;
for(var i=3;i<=n;i++){
num = n1+n2;
n1=n2;
n2=num;
}
return num;
}
//输入某年某月某日,判断这一天是这一年的第几天?
function isRn(year){
if((year%4===0&&year%100!==0)||year%400===0){
return true;
}
return false;
}
function getDayNum(year,month,day){
//每个月的天数 假设二月是28天
//如果是1月直接返回天数 day
//如果不是1月,要累加之前每个月的天数+day
var days=day;//总共的天数
var months=[31,28,31,30,31,30,31,31,30,31,30,31];
for(var i=0;i<month-1;i++){
days+=month[i];
}
//如果是闰年并且月份大于2 days+1
//闰年:能被4整除并且不能被100整除,或者能被400整除
if(month>2&&isRn(year)){
days++;
}
return days;
}
递归
方法自身调用,还要有结束条件
//从前有座山,山里有个庙...
var i=0;
function say(){
console.log("从前有座山,山里有个庙..."+i);
i++;
if(i<10){
say();
}
}
say()
// 求 n 个数的累加
function getSum(n){
if(typeof num !=="number" || num<=0 || num%1 !== 0){
console.log("有本事你传个正整数试试");
return 0;
}
if(n===1){
return 1;
}
return n+getSum(n-1)
}
console.log(getSum(100))//5050
//输入一个数,求这个数的各位数字之和
//123
//123%10=3 123/10=12.3
//12%10=2 12/10=1.2
//1%10=1 1/10=0.1
function getSum(n){
//结束条件
if(n<10){
return n;
}
return n%10+getSum(parseInt(n/10));
}
//求斐波拉契数列Fibonacci中的第 n个数是多少?
function Fibonacci(n){
if(typeof n !=="number" || n<=0 || n%1 !== 0){
return "咱认真传值可以伐";
}
if(n===1||n===2){
return 1;
}
return Fibonacci(n-1) + Fibonacci(n-2);
}
函数可以作为另一个函数的参数
//求两个数数学运算的结果
/**
*
* @param a {number}
* @param b {number}
* @param fn {function}
*/
function getResult(a, b, fn){
console.log(a, b, fn)//5, 6 ,function (x, y){return x+y;}
return fn(a, b);//11 函数getResult() 返回结果是一个函数fn();
}
var f1 = function(x, y){
return x+y;
};
var result= getResult(5, 6, f1);// 把5, 6, f1三个参数传个函数getResult()
console.log(result)
打开App,阅读手记