Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[js] 第50天 请写出一个函数求出N的阶乘(即N!) #191

Open
haizhilin2013 opened this issue Jun 4, 2019 · 19 comments
Open
Labels
js JavaScript

Comments

@haizhilin2013
Copy link
Collaborator

第50天 请写出一个函数求出N的阶乘(即N!)

@haizhilin2013 haizhilin2013 added the js JavaScript label Jun 4, 2019
@cleverboy32
Copy link

function factorial(n) {
      if (n > 1)  return n*factorial(n-1);
      return 1;
}

@myprelude
Copy link

function getTotal(n){
  let s = 1,total;
  while(s<=n){
    total = 1*s;
    s++;
  }
  return total
}

@Konata9
Copy link

Konata9 commented Jul 9, 2019

const stepNum = (num) => (num === 1 ? num : num * stepNum(num - 1));

console.log(stepNum(3))
console.log(stepNum(4))
console.log(stepNum(5))
console.log(stepNum(6))

@wyx2014
Copy link

wyx2014 commented Jul 25, 2019

const getN = function (n,sum =1) {
   if(typeof n !=='number'){
       return '请输入数字类型'
   }
   if(n === 0){
       return sum;
   }else{
       sum = sum * n;
       return getN( --n ,sum);
   }
}

@DingkeXue
Copy link

const getN = function (n,sum =1) {
   if(typeof n !=='number'){
       return '请输入数字类型'
   }
   if(n === 0){
       return sum;
   }else{
       sum = sum * n;
       return getN( --n ,sum);
   }
}

推荐这种写法,进行了尾递归优化,数值很大也不会出现内存溢出的问题

@damofan
Copy link

damofan commented Sep 7, 2019

const getFactorial = n => {
	return new Array(n-1).join(',').split(',').reduce( total => { --n;  return total*n}, n)
}

@JJL-SH
Copy link

JJL-SH commented Sep 24, 2019

function getN(num) {
  return Array.from(new Array(num)).reduce((cacheNum, it, index) => {
    return cacheNum * (index + 1);
  }, 1);
}
console.log(getN(6));

@ZindexYG
Copy link

const factorial = num => {
  if (num > 1) 
    return num * factorial(num - 1)
  return 1
}

console.log(factorial(5))

@huangd-d
Copy link

function getTotal(n){
  let s = 1,total;
  while(s<=n){
    total = 1*s;
    s++;
  }
  return total
}

while( n>=1 ){
...
n--;
}
可以少个变量,感觉比递归方式,这样写舒服点。

@xiaocaicaiaichicai
Copy link

这好像都没考虑位数限制

@lizhesystem
Copy link

lizhesystem commented May 9, 2020

判断了下如果小于0以及其他因素。

    function factorial(num) {
        let data = num;
        if (num < 0) return -1;
        if (num === 0 || num === 1) return 1;
        while (num > 1) {
            num--;
            data *= num;
        }
        return data;
    }

    console.log(factorial(5));  // 120

@c37csq
Copy link

c37csq commented Jun 2, 2020

function getNum (num) {
let s = 1, total = 1;
while (s <= num) {
total = total * s
s ++
}
return total
}
console.log(getNum(5))

@13168335674
Copy link

function factorial(num, sum = 1) {
    if(num <= 1)return sum;
    sum *= num;
    return factorial(--num, sum);
}

@waterkitten
Copy link

waterkitten commented Aug 9, 2020

正常递归会爆栈,所以要动态规划
var trailingZeroes = function(n) {
let arr=[1];
for(let i=1;i<n;i++){
arr[i]=arr[i-1]*(i+1)
}
return arr[n-1]

};

@bozaigao
Copy link

bozaigao commented Oct 8, 2020

function tailDiGui(n, r) {
    if (n === 1) {
        return r;
    } else {
        return tailDiGui(n - 1, r * n)
    }
}

function jieCheng(n) {
    return tailDiGui(n, 1)
}
console.log(jieCheng(100));

@bozaigao
Copy link

bozaigao commented Oct 17, 2020

function factorial(n) {
    if (isFinite(n) && n > 0 && Math.round(n)) {
        if (!(n in factorial)) {
            factorial[n] = n * factorial(n - 1)
        }

        return factorial[n]
    } else {
        return NaN;
    }
}

factorial[1] = 1;

console.log(factorial(1000));

@MrZ2019
Copy link

MrZ2019 commented Nov 11, 2020

function factorial(n) {
      if (n > 1)  return n*factorial(n-1);
      return 1;
}

@jamsehua
Copy link

function getTotal(n){
  let s = 1,total;
  while(s<=n){
    total = 1*s;
    s++;
  }
  return total
}

上面这个不行,
function getTotal(n){
let s = 1,total=1;
while(s<=n){
total = total*s;
s++;
}
return total
}

@xiaoqiangz
Copy link

function factorial(num, sum = 1) {
if (num < 1) {
return sum
}
sum *= num
return factorial(--num, sum)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
js JavaScript
Projects
None yet
Development

No branches or pull requests