风君子博客

  • 首页
  • 业界
  • 前端
  • 运维
  • 建站
  • 软件
  • 生活
  • 后端
  • 创投
  • 运营
  • 程序人生
    • 影视
    • 游戏
    • 句子
    • bootstrap4教程
    • 资源
    • 日期计算器
  • 其他
    • 说说
    • 关于本站
  1. 首页
  2. 前端
  3. 正文

js实现阶乘问题代码

2018年10月31日 797点热度 0人点赞 0条评论

阶乘介绍:一个正整数的阶乘是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!

阶乘函数是递归函数典型示例。

阶乘的实现方法(一种递归,两种循环):

 方法1:递归

function factorial (num) { 
    if (num < 0) { 
        return -1; 
    } else if (num === 0 || num === 1) { 
        return 1; 
    } else { 
        return (num * factorial(num - 1)); 
    } 
};
factorial(6);

定义阶乘函数一般都要用到递归算法;如上面的代码所示,在函数有名字,而且名字以后也不会变的情况下,这样定义没有问题。但问题是这个函数的执行与函数名 factorial 紧紧耦合在了一起。为了消除这种紧密耦合的现象,可以像下面这样使用 arguments.callee。(非严格模式)

function factorial(num){
    if (num <=1) {
        return 1;
    } else {
        return num * arguments.callee(num-1)
    } 
}

在这个重写后的factorial()函数的函数体内,没有再引用函数名 factorial。这样,无论引用函数时使用的是什么名字,都可以保证正常完成递归调用。

var trueFactorial = factorial;
factorial = function(){
    return 0;
};
alert(trueFactorial(5));     //120

但在严格模式下,不能通过脚本访问 arguments.callee,访问这个属性会导致错误。不过,可以使用命名函数表达式来达成相同的结果

var factorial = (function f(num){
        if (num <= 1){
            return 1;
        } else {
            return num * f(num-1);
     }
});

方法2:for循环

function factorial (num) {
    if (num < 0) {
        return -1;
    } else if (num === 0 || num === 1) {
        return 1;
    } else {
        for (var i = num - 1; i >= 1; i--) {
            num *= i;
        }
    }
    return num;
};
factorial(6);

方法3:while循环

function factorial (num) { 
    var result = num; 
    if (num < 0) { 
        return -1; 
    } else if (num === 0 || num === 1) { 
        return 1; 
    } else { 
        while (num > 1) { 
            num--; 
            result *= num; 
        } 
    } 
    return result; 
};
factorial(6);

方法4:尾递归

function factorial(n, total) {
  if (n === 1) return total;
  return factorial(n - 1, n * total);
}

factorial(5, 1) // 120

 

本文转自:https://www.cnblogs.com/jialuchun/p/6559422.html

标签: js 递归 阶乘
最后更新:2019年6月6日

风君子

独自遨游何稽首 揭天掀地慰生平

点赞
< 上一篇
下一篇 >

猜你喜欢

  • 漏洞利用接踵而至:Apache为Log4j发布2.17.0新版补丁修复

  • 华为 HarmonyOS 开源鸿蒙方舟编译器前端工具“方舟 JS 运行时”正式开源

  • 禁止鼠标右键代码 禁止按键F5和禁止鼠标右键菜单 js代码

  • JS基础测试: typeof delete window.name 的返回结果是什么?​

  • JS实现汇率换算

  • js实现简单五子棋游戏源码

  • 【FCC】番茄时钟pomodoro clock网页版

  • 【FCC】Pairwise js算法

  • 【FCC】Map the Debris

  • 【FCC】Make a Person

  • 【FCC】Friendly Date Ranges

  • 【FCC】No repeats please

文章评论

取消回复

风君子

独自遨游何稽首 揭天掀地慰生平

最新 热点 随机
最新 热点 随机
分析师:苹果 iPhone 需求仍强劲,iPhone 14 / Pro 系列初期量产计划会高于 iPhone 13 / Pro 国内首发锐炫 A370M 显卡,雷神推出新款 T-Book 轻薄创作本 苹果委托的研究称:App Store 让小企业和独立开发者受益,收入比大企业增长更快 美股科技股暴跌让卖空者收益颇丰:34% 的利润来自 IT 股 苹果斥资数百万美元安置无家可归者,9 个月期满后仅安置 8 人 机械革命预热水冷游戏本旷世 X:12 代酷睿 HX + RTX 3080 Ti,17 英寸 2.5K 240Hz 屏 苹果新专利:未来 Apple Pencil 配备全触控式控制 RTX 40 系列守口如瓶?NVIDIA 台北电脑展官宣 12 款游戏支持 DLSS,500Hz G-SYNC 显示器问世 《电子竞技产业报告》研讨会召开,腾讯、网易、完美等多家相关企业参加 F1 赛车手通过苹果“Find My”追踪盗窃 AirPods 耳机的小偷
抖音IP属地准确吗e地跑:全国线路覆盖率达92.5%,将升级智能扫码加油功能完成加油监控米哈游《原神》全球用户支出将突破 27 亿美元:打破最高季度纪录,中美日韩德支出最多索尼 QD-OLED 画谛系列电视 A95K 国行即将发布格力电器 2021 年营收 1878.69 亿元同比增长 11.69%施耐德电气顾俊:5G赋能,制造业智能化转型“加速”苹果将 iPad Air 2 和 iPad Mini 2 加入过时产品名单IDC:2021 年中国网络市场规模达 102.4 亿美元,路由器市场同比下滑 2.6%波导股份第一季度净利润 552.94 万元,同比增长 75.79%我们常用谁言寸草心报得三春晖歌颂母爱,它的作者是
国产3A游戏崛起? 除了“黑·悟空”我们还能信仰什么? 百年人寿是国企吗 ios8延时摄影怎么用?ios8正式版延时拍摄使用方法步骤 中通快递网点用假人充当安检员 暂未发现违规收费 9年了 Intel原装散热器终于变了!细节优化 住过院的人可以买保险吗 OPPO A55上手:联发科天玑700全球首发 中国太平是什么公司 欧盟芯片法案正式颁布:敲定八年四倍产能目标,投入超过 430 亿欧元,还将设立专门基金 Win10专业版麦克风不工作怎么办?
标签聚合
信用卡 利息 秘籍 华为 手机 额度 特斯拉 美国 科技 IT资讯 汽车 支付宝 快科技 iphone 小米 苹果 银行卡 三星 京东 谷歌 芯片 马斯克 微软 贷款 股票 业界 借款人 腾讯 利率 银行
Tags
酒 胡萝卜 食物 私房菜 有什么好处 水果 能吃 鸡蛋 身体 会胖吗 副作用 吃什么 相克 好处 饮食 作用 土豆食谱 方法 牛肉 豆腐 糖 热量 茄子 好吃 营养 皮肤过敏 区别 菜谱 牛肉食谱 功效 怎么做 营养价值 豆腐食谱 维生素 土豆 热菜 食用方法 常吃 健康 排骨 汤类 高血压 牛奶 糖尿病人 做法 吃法 下饭菜 海鲜 一起吃 排骨食谱
最近评论
九九 发布于 3 周前(05月06日) 也可能是 IP2LOCATION 数据
风君子 发布于 5 个月前(12月20日) 直播这么赚钱的吗?
wanif 发布于 5 个月前(12月18日) 采用你提供的pe制作u盘后无法识别mac硬盘,如何解决?
robotunl 发布于 5 个月前(12月18日) 可以用了,感谢
robotunl 发布于 5 个月前(12月17日) DISM++链接下不了了啊,能再发一个么。 还有怎么制作和博主一样的PE u盘。
tiantian 发布于 10 个月前(08月08日) 谢谢分享!
欣姐 发布于 1 年前(02月06日) 很有道理啊
我在東莞上班睡覺工資一千五六 发布于 1 年前(12月16日) 东莞台商都开始搬迁河源,梅州包括赣州一些地方要么就是内地城市,因为电子厂需要大量人力所以基本上都是中...
我在東莞上班睡覺工資一千五六 发布于 1 年前(12月16日) 这个怎么有意思了,是不是太真实了 :smile: :smile:
东莞石碣维信五金制品有限公司睡觉一千五六 发布于 1 年前(12月15日) 台商大陆模式搞习惯了去了印度未必成功 :idea:

COPYRIGHT © 2021 风君子博客. ALL RIGHTS RESERVED.

豫ICP备14018241号