解决JavaScript中笨拙的阶乘问题

通常,正整数n的阶乘是所有小于或等于n的正整数的乘积。例如,factorial(10)= 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 * 1。

取而代之的是笨拙的阶乘:使用递减的整数,将乘法运算交换为固定的旋转运算:乘法(*),除法(/),加法(+)和减法(-)。

例如,clumsy(10)= 10 * 9/8 + 7-6 * 5/4 + 3-2 *1。但是,这些运算仍然使用算术运算的通常顺序进行:我们都进行乘法和除法从左到右处理任何加法或减法步骤之前的步骤以及乘法和除法步骤。

让我们用JavaScript编写此函数的代码-

示例

const clumsy = num => {
   let k=num;
   let res = 0, temp=1, i=0;
   while(k>0){
      temp = k;
      if(k-1>0){
         temp*=(k-1);
      }
      if(k-2>0){
         temp/=(k-2);
      }
      if(k-3>0){
         if(k===num){
            temp+=(k-3);
         }else{
            temp-=(k-3);
         }
      }
      if(k===num){
         res = temp;
      }else{
         res = res-temp;
      }
      k = k-4;
   }
   return res;
};
console.log(clumsy(4));
console.log(clumsy(10));
console.log(clumsy(16));
console.log(clumsy(5));

输出结果

控制台中的输出将为-

7
11.75
16.609523809523807
7.666666666666668