【实现方法】

  1.利用while循环来做,当然for循环也可以。

  2.递归

【代码内容】

    偷懒,直接用onkeyup事件来限制来页面的输入

 

  循环代码:

    

//第一种方法 while循环
oCount.onclick = function (){
var oNum = document.getElementById('num').value;
oNum = Number(oNum);
if(oNum <= 1){
oBox.innerHTML = 1;
}
var oRes = 1;
while(oNum){
oRes *= oNum;
oNum--;
}
oBox.innerHTML = oRes;
}

  

    

  递归代码

// 第二种方法   递归
oCount.onclick = function(){
var oNum = document.getElementById('num').value;
oNum = Number(oNum);
function factorial (num) {
if (num <= 1) {
return 1;
} else {
return (num * factorial(num-1));
}
};
oRes=factorial(oNum);
oBox.innerHTML = oRes;
};

  

  完整代码:

 

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>两种实现阶乘方法</title>
<style>
#box {
width: 100%;
height: 200px;
border: 1px solid #ccc;
text-align: center;
}
</style>
<script>
window.onload = function() { var oBox = document.getElementById('box');
var oCount = document.getElementById('count'); // 第一种方法 while循环
// oCount.onclick = function (){
// var oNum = document.getElementById('num').value;
// oNum = Number(oNum);
// if(oNum <= 1){
// oBox.innerHTML = 1;
// }
// var oRes = 1;
// while(oNum){
// oRes *= oNum;
// oNum--;
// }
// oBox.innerHTML = oRes;
// } // 第二种方法
oCount.onclick = function(){
var oNum = document.getElementById('num').value;
oNum = Number(oNum);
function factorial (num) {
if (num <= 1) {
return 1;
} else {
return (num * factorial(num-1));
}
};
oRes=factorial(oNum);
oBox.innerHTML = oRes;
};
}
</script>
</head>
<body>
<div id="box"></div>
<input type="text" id="num" onkeyup="value=value.replace(/[^0-9]/g,'')" onpaste="value=value.replace(/[^0-9]/g,'')" oncontextmenu = "value=value.replace(/[^0-9]/g,'')">
<input type="button" id="count" value="计算">
</body>
</html>

JavaScript利用递归和循环实现阶乘的更多相关文章

  1. Javascript利用递归实现数组的快速排序

    // 定义快速排序方法 function quickSort(arr){ // 设置递归的终止条件 if( arr.length <= 1){ return arr; } // 获得数组arr的 ...

  2. 小记:利用递归调用循环寻找MP3文件的方法。

    private void findMp3Data(File mp3file) { File[] filelist = mp3file.listFiles(); if (filelist != null ...

  3. javascript递归、循环、迭代、遍历和枚举概念

    javascript递归.循环.迭代.遍历和枚举概念 〓递归(recursion)在数学与计算机科学中,是指在函数的定义中使用函数自身的方法.递归一词还较常用于描述以自相似方法重复事物的过程.例如,当 ...

  4. SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型

    SQL 横转竖 .竖专横 (转载)   普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...

  5. JavaScript:利用递归实现对象深拷贝

    先来普及一下深拷贝和浅拷贝的区别浅拷贝:就是简单的复制,用等号即可完成 let a = {a: 1} let b = a 这就完成了一个浅拷贝但是当修改对象b的时候,我们发现对象a的值也被改变了 b. ...

  6. JAVA下实现二叉树的先序、中序、后序、层序遍历(递归和循环)

    import java.util.HashMap; import java.util.LinkedList; import java.util.Map; import java.util.Queue; ...

  7. 深入理解javascript中的事件循环event-loop

    前面的话 本文将详细介绍javascript中的事件循环event-loop 线程 javascript是单线程的语言,也就是说,同一个时间只能做一件事.而这个单线程的特性,与它的用途有关,作为浏览器 ...

  8. uni-app图片压缩转base64位 利用递归来实现多张图片压缩

    //选择图片 chooseImage(){ let that =this uni.chooseImage({ sizeType: ['original','compressed'], //可以指定是原 ...

  9. Java中递归和循环的优劣

    介绍: 你用你手中的钥匙打开一扇门,结果去发现前方还有一扇门,紧接着你又用钥匙打开了这扇门,然后你又看到一扇门......但是当你开到一扇门时,发现前方是一堵墙无路可走了,你选择原路返回--这就是递归 ...

随机推荐

  1. Unable to execute dex: Multiple dex files defineLcom/google/gson/JsonDeserializer;

    这是异常想必大家都知道的,是关于一个android jar包冲突的问题.为什么还要提呢,是因为这玩意真心让人蛋疼.有些时候稍微不注意(手贱)多导入一个包,就完蛋了.(jar包多的话搞不好带一上午调试) ...

  2. Java多线程编程模式实战指南(二):Immutable Object模式

    多线程共享变量的情况下,为了保证数据一致性,往往需要对这些变量的访问进行加锁.而锁本身又会带来一些问题和开销.Immutable Object模式使得我们可以在不使用锁的情况下,既保证共享变量访问的线 ...

  3. sprintf()函数用法

    sprintf()用法见操作手册:http://www.php.net/sprintf 简单写下format的用法: 1. + - 符号,数字 2. 填充字符 默认是空格,可以是0.如果其他字符填充, ...

  4. Ionic App 启动时报Application Error - The connection to the server was unsuccessful

    最近在更新App的时候,发现在华为手机上报这个错误,有点困惑,查找资料分析,大概原因是程序在加载index.html网页时,加载的资源过多,造成时间超时, 这个时原因分析https://stackov ...

  5. 如何构造树状 JSON 数据 JSON-Tree

    十年河东,十年河西,莫欺骚年穷...打错一个字哈.~_~ 接着上一篇博客,上一篇博客是=使用数据库结合LINQ构造的,为了方便理解,本篇采用泛型分组进行构造. 有兴趣的小虎斑可以参考上一篇博客:如何构 ...

  6. WD与循环 组合数学

    WD与循环 LG传送门 为什么大家都是先算\(n\)个数的和等于\(m\)的情况再求前缀和? 既然已经想到了插板法,为什么不直接对\(n\)个数的和\(\le m\)的情况做呢? 基本套路没有变:考虑 ...

  7. Mybatis教程-实战看这一篇就够了

    转自:https://blog.csdn.net/hellozpc/article/details/80878563 1.从JDBC谈起 1.1.使用IDEA创建maven工程 1.2.引入mysql ...

  8. 老生常谈,函数柯里化(curring)

    柯里化这个概念确实晦涩难懂,没有深入思考过的人其实真的很难明白这是一个什么东西.看起来简单.简单到或许只需要一行代码: const curry = fn => (…args) => fn. ...

  9. sqli-labs less 1-4

    sqli-labs less 1-4 数字型注入 当输入的参数为整形时,如果存在注入漏洞,可以认为是数字型注入. 测试步骤: (1) 加单引号,URL:www.text.com/text.php?id ...

  10. Centos7下关于系统用户密码规则-运维笔记

    针对Centos7下的系统用户的密码规则复杂度的设置,处于安全考虑,说明如下: 一.设置密码规则 1)密码长度.有效期 /etc/login.defs文件是当创建用户时的一些规划,比如创建用户时,是否 ...