<style type="text/css"> body { font-size: 24pt; } #container, #tip { width: 600px; margin: 10px auto; background-color: white; padding: 10px; border: 1px solid lightsteelblue; } #tip { font-size: 10pt; } #blackboard { background-color: black; color: white; padding: 25px; border: 1px solid black; font-size: 13pt; font-family: 'Courier New', monospace; height: 300px; z-index: 1; } #teacher { background-color: #448; color: white; padding: 15px; border: 1px solid black; margin: 20px 0; } #student { background-color: #dfd; color: #373; padding: 15px; border: 1px solid black; } #downArray { font-size: 24pt; position: relative; top: -230px; left: 555px; color: white; width: 35px; height: 35px; z-index: 9999; cursor: pointer; background-color: #666; } div.clear { clear: both; height: 1px; overflow: hidden; }</style> <script type="text/javascript"> var steps = [[ {actor:"blackboard", type:"say", value: "1. 了解阶乘(factorial)"} ],[ {actor:"", type:"clear", value: "blackboard"}, {actor:"teacher", type:"say", value: "请看上面:"}, {actor:"", type:"wait", value: 0.2}, {actor:"blackboard", type:"say", value: "1"}, {actor:"", type:"wait", value: 0.5}, {actor:"teacher", type:"say", value: "这是什么?"} ],[ {actor:"student", type: "say", value: "这是整数 1。"} ],[ {actor:"teacher", type: "say", value: "在 Ruby 中,这样写就能得到整数 1。"}, {actor:"", type:"wait", value: 0.2}, {actor:"teacher", type:"say", value: "如果我想得到 2 呢?"} ],[ {actor:"", type:"clear", value: "blackboard"}, {actor:"student", type: "say", value: "像上面这样:"}, {actor:"", type:"wait", value: 0.2}, {actor:"blackboard", type:"show", value: "2"} ],[ {actor:"teacher", type: "say", value: "没错。有没有其他方式呢?"} ],[ {actor:"", type:"clear", value: "blackboard"}, {actor:"student", type: "say", value: "嗯……,上面这样也可以吧:"}, {actor:"", type:"wait", value: 0.2}, {actor:"blackboard", type:"show", value: "2 * 1"} ],[ {actor:"teacher", type: "say", value: "对了。"}, {actor:"", type:"wait", value: 0.2}, {actor:"teacher", type:"say", value: "如果我想得到 6 呢?"} ],[ {actor:"", type:"clear", value: "blackboard"}, {actor:"student", type: "say", value: "像上面这样:"}, {actor:"", type:"wait", value: 0.2}, {actor:"blackboard", type:"show", value: "3 * 2 * 1"} ],[ {actor:"teacher", type:"say", value: "24 呢?"} ],[ {actor:"", type:"clear", value: "blackboard"}, {actor:"student", type: "say", value: "像上面这样:"}, {actor:"", type:"wait", value: 0.2}, {actor:"blackboard", type:"show", value: "4 * 3 * 2 * 1"} ],[ {actor:"teacher", type:"say", value: "类似这样的乘法表达式,你以前见过吗?"} ],[ {actor:"student", type:"say", value: "见过,这叫阶乘(factorial)。"} ],[ {actor:"", type:"clear", value: "blackboard"}, {actor:"teacher", type:"say", value: "没错。我们看看这个 Ruby 函数:"}, {actor:"", type:"wait", value: 0.5}, {actor:"blackboard", type:"show", value: "def factorial(n)\n" + " if n == 1\n" + " n\n" + " else\n" + " n * factorial(n-1)\n" + " end\n" + "end"} ],[ {actor:"student", type:"say", value: "它的名字叫 factorial,它就是做阶乘的吧?"}, {actor:"", type:"wait", value: 0.5}, {actor:"student", type:"say", value: "不过看起来好像太简单了。"} ],[ {actor:"teacher", type:"say", value: "那你说说阶乘最简单的定义是什么?"} ],[ {actor:"student", type:"say", value: "最简单的定义是:n! = n * (n-1)!"} ],[ {actor:"teacher", type:"say", value: "那你再看看上面这个函数,"} ],[ {actor:"student", type:"say", value: "看到了,第五行,n * factorial(n-1)"}, {actor:"", type:"wait", value: 0.2}, {actor:"student", type:"say", value: "和刚才的定义很像。"} ],[ {actor:"teacher", type:"say", value: "没错。但是如果当 n 减到 1 了呢?"} ],[ {actor:"student", type:"say", value: "当然不能再往下乘了,否则结果就变成 0 了。"}, {actor:"", type:"wait", value: 0.2}, {actor:"student", type:"say", value: "所以当 n 为 1 的时候应该直接得到 1。"} ],[ {actor:"teacher", type:"say", value: "那你再看看上面这个函数,"} ],[ {actor:"student", type:"say", value: "看到了,第二行好像就是做这个判断的。"}, {actor:"", type:"wait", value: 0.2}, {actor:"student", type:"say", value: "如果满足这个条件,第三行就是返回 1 吧。"} ],[ {actor:"teacher", type:"say", value: "就是这样。现在你能不能描述一下这个函数的过程?"} ],[ {actor:"student", type:"say", value: "简单。如果参数为 1,则结果也为 1,"}, {actor:"", type:"wait", value: 0.5}, {actor:"student", type:"say", value: "否则结果为 n * factorial(n-1)。"} ]];var currentStep = 0;var currentSubstep = 0;var currentStatus = "ready";function toNormalString(str) { str = str.replace(/ /g, " "); str = str.replace(/</g, "<"); str = str.replace(/>/g, ">"); str = str.replace(/"/g, "\""); str = str.replace(/
/g, "\n"); return str;}function toHTML(str) { str = str.replace(/ /g, " "); str = str.replace(/</g,>/g, ">"); str = str.replace(/\"/g, """); str = str.replace(/\n/g, "
"); return str;}function say() { var step = steps[currentStep]; var substep = step[currentSubstep]; var msg = substep.value; var element = document.getElementById(substep.actor); var content = toNormalString(element.innerHTML); if (content == " ") { content = ""; } if (content.length < msg.length) { element.innerHTML = msg.substring(0, content.length + 1); setTimeout(say, 100); } else { addSubstep(true); }}function wait() { var step = steps[currentStep]; var substep = step[currentSubstep]; addSubstep(false); setTimeout(nextStep, substep.value * 1000);}function doClear() { var step = steps[currentStep]; var substep = step[currentSubstep]; document.getElementById(substep.value).innerHTML = " "; addSubstep(true);}function show() { var step = steps[currentStep]; var substep = step[currentSubstep]; document.getElementById(substep.actor).innerHTML = toHTML(substep.value); addSubstep(true);}function addSubstep(autoNext) { currentSubstep += 1; if (autoNext) { setTimeout(nextStep, 100); }}function nextStep() { if (currentStep == steps.length) { return; } if (currentStatus == "ready") { currentStatus = "running"; document.getElementById("downArray").style.display = "none"; } var step = steps[currentStep]; var substep = step[currentSubstep]; if (currentSubstep == step.length) { currentSubstep = 0; currentStep += 1; currentStatus = "ready"; document.getElementById("downArray").style.display = ""; return; } if (substep.type == "say") { document.getElementById(substep.actor).innerHTML = " "; say(); } else if (substep.type == "clear") { doClear(); } else if (substep.type == "show") { show(); } else if (substep.type == "wait") { wait(); }}function attachEvent(elem, eventName, callback) { if (elem.addEventListener) { elem.addEventListener(eventName, callback, false); } else if (elem.attachEvent) { elem.attachEvent('on' + eventName, callback); } else { var currentEventHandler = elem['on' + eventName]; if (currentEventHandler == null) { elem['on' + eventName] = callback; } else { elem['on' + eventName] = function(e) { currentEventHandler(e); callback(e); } } }}function gotoNextStep() { if (currentStatus == "ready") { nextStep(); }}</script>
<script type="javascript">attachEvent(document.getElementById("downArray"), "click", gotoNextStep);</script>
分享到:
相关推荐
总的来说,"bluemix-factorial"项目是一个学习和实践Node.js、HTTP服务器以及计算阶乘的简单示例,适合初学者了解如何在Node.js环境中构建服务。同时,它也展示了如何将本地应用部署到云端平台,如Bluemix。
这意味着源代码可能包含了一个或多个.js文件,这些文件包含了实现阶乘计算的JavaScript代码,可能还包含测试文件、README文档或者其他项目相关资源。 在JavaScript中实现阶乘,可以使用递归或者循环两种常见方法。...
虽然Monads在JavaScript中的使用相对较少,但了解其基本概念和用例有助于拓宽编程思维。 通过阅读《JavaScript函数式编程》这本书,读者可以学习如何在实际项目中应用这些概念,提升代码质量,减少出错的可能性,并...
首先,我们需要了解JavaScript的基础知识,它是Web开发中的主要脚本语言,用于控制网页的行为。在HTML中,我们可以通过`<script>`标签来引入JavaScript代码,或者将代码直接写在`<script>`标签内部。对于这个科学...
- **测试驱动开发**:编写单元测试,确保代码的正确性,便于后期维护。 - **文档编写**:为代码添加清晰的注释,方便他人理解和使用。 4. **JavaScript特定技巧**: - **闭包**:理解作用域和闭包的概念,以及...
通过参与 functional-javascript-workshop,开发者不仅可以学习到上述概念,还能了解到如何在实际项目中应用这些技巧,从而写出更高效、可维护的JavaScript代码。实践中遇到的问题和解决方案将加深对函数式编程的...
标题中的"factorial-bm-Nodejs-G"指的是一个...如果你想要深入了解这个项目,可以解压文件并查看源代码,了解具体的实现细节和测试过程。同时,阅读项目文档将有助于理解如何运行和测试这个基于Node.js的阶乘计算服务。
总之,JavaScript数学库是开发者解决复杂数学问题的好帮手,通过npm命令进行管理和测试,确保了其在项目中的稳定性和可靠性。对于任何需要进行数学计算的JavaScript应用,选择合适的数学库都能显著提升开发效率和...
可以通过阅读源码了解算法的具体实现,同时,库可能还提供了相关的测试用例和示例代码以帮助开发者理解和使用。 总之,algoJS 是一个强大的工具,它将算法的力量带入了 JavaScript 开发世界。无论你是初学者还是...
通过这个项目,你可以深入了解JavaScript在构建交互式用户界面和处理数学计算方面的能力。 1. **JavaScript基础**:此项目是用JavaScript编写的,这是一种广泛使用的客户端脚本语言,用于增强网页的交互性。理解...
9. **调试与测试**:使用断点、日志和单元测试(如Mocha和Chai)来确保代码的正确性和效率,这是任何编程项目中的重要步骤。 在"ProjectEuler-master"这个压缩包中,很可能包含了用JavaScript实现的项目欧拉问题...
在JavaScript中处理这种数学问题,我们需要了解以下关键知识点: 1. **基本数学运算**:JavaScript 支持基本的数学运算符,如加法(+)、减法(-)、乘法(*)和除法(/)。对于阶乘,我们可以使用循环或者递归来...
对于数据分析部分,熟悉JavaScript的数据处理和A/B测试概念也是必要的。如果项目涉及到服务器通信,了解Ajax或现代前端框架如React或Vue.js也会有所帮助。总的来说,IScalculator是一个结合了前端开发、用户体验设计...
学生需要了解如何通过控制面板的管理工具来安装IIS,然后设置主目录到他们创建的文件夹,以确保Web服务器能正确地访问和处理网页内容。 2. **VBScript语法**:VBScript是Visual Basic Scripting Edition的简称,是...
3. **测试框架**:为了确保代码的质量和正确性,开发者可能会使用如JUnit(Java)、pytest(Python)或Mocha/Chai(JavaScript)等测试框架,编写单元测试和集成测试。 4. **版本控制**:作为Git仓库的一部分,项目...
通过“js-algo-practice-main”这个项目,你可以逐步学习和实践这些概念,每个挑战都可能包含详细的解释、示例代码和测试用例。通过不断练习,你将能够熟练掌握JavaScript算法,提高解决问题的能力,为未来的职业...
在深入探讨这个源码之前,我们需要了解一些基础概念。 首先,科学计算器通常具备比普通计算器更复杂的计算功能,如对数、指数、三角函数、复数运算、阶乘、求根等。在编程领域,实现这些功能需要理解和应用数学库或...
9. **JavaScript应用**:虽然Java面试主要关注Java语言,但面试者对JavaScript的理解也可能被考察,例如,你可能需要编写一个简单的函数,如`test()`,来展示如何弹出提示窗口。 10. **Swing和AWT**:作为Java GUI...
在JavaScript(简称JS)编程中,数学阶层算法是一种常见的数据结构和算法问题,它涉及到计算一个数字的阶乘。阶乘是指将一个正整数n与小于它的所有正整数相乘的结果,例如5的阶乘(5!)是5 * 4 * 3 * 2 * 1 = 120。...
11. **测试与调试**:软件开发的后期阶段,需要进行单元测试、集成测试和系统测试,确保所有功能正常工作且无bug。 12. **版本控制**:使用Git等版本控制系统管理代码,便于协作和版本追踪。 综上所述,创建一个多...