这次给大家带来JS常用算法累加、迭代、穷举、递归实现(附代码),JS常用算法累加、迭代、穷举、递归的注意事项有哪些,下面就是实战案例,一起来看一下。
累加和累积
累加:将一系列的数据加到一个变量里面。最后的得到累加的结果
比如:将1到100的数求累加和
小球从高处落下,每次返回到原来一半,求第十次小球落地时小球走过的路程
<script> var h=100; var s=0; for(var i=0;i<10;i++){ h=h/2; s+=h; } s=s*2+100; </script>
累积:将一系列的数据乘积到一个变量里面,得到累积的结果。
常见的就是n的阶乘
var n=100; var result= 1; for(var i=1;i<=n;i++){ result *=i; }
一般形式:
累加:V +=e;
累积:v*=e;
V代表累加和累积,e代表累加/累积项
算法要点:
(1)初始化
初始化v和e
累加:v = 0;
累积:v = 1;
e的初始化,如果累加/积项比较复杂,可能会分解为几个子项分别初始化,比如计算圆周率的问题,累计项分解为符号、分子和分母三部分。
(2)循环的控制条件
一种是固定的次数,比如计算弹跳距离的问题,计算数列前20项之和的问题,
次数不固定,而是要满足某个条件:计算圆周率问题要求最后一项的绝对值,要小于10-6。
(3)确定累加/积项的变化
比如数列的前20项之和,是将当前的分子分母之和作为下一次的分母,当前的分母作为分子。
再比如求圆周率问题,是将符号取反、分母加2,然后的出下一项。
迭代
迭代法也就是辗转法
规律:就是可以不断地用旧的值得到新的值,直到我们想要的得到的结果。
遇到了迭代的问题怎么解决
1. 找到迭代的变量(旧的值)
2. 确定迭代的关系
3. 知道想要的结果是什么(结束循环的条件)
(1)就是知道最终结果
(2)循环的次数
<script> /* * 1.接受用户输入的俩个数 * 2.一个函数的到最大公约数 * 3.打印这个最大公约数*/ var num1 = Number(prompt("请输入一个数")); var num2 = Number(prompt("请输入一个数")); var result = GCD(num1,num2); alert(result); /* * 函数的功能:得到最大公约数 * 函数名:GCD * 函数的参数:俩个整数 * 返回值:最大公约数*/ /* * 如果num1<num2则交换,确保num1是交大的 * 计算余数 * 当num1(除数),对num2(被除数)的余数不为0,重复一下步骤 * num2=>num1, * 余数=>num2 * 重新计算余数 * 最终的到最大公约数,也就是num2的值*/ function GCD(num1,num2){ /*return0;*/ if(num1<num2){ var t = num1; num1=num2; num2 = t; } var remainder = num1%num2; while(remainder!= 0){ num1=num2; num2= remainder; remainder=num1%num2; } returnnum2; } </script>
递推
找到数学规律:通过公式计算到下一项的值,一直到我们要的结果为止
例如:兔子产子:通过前俩项得到下一项
<script> /* * 一般而言,兔子在出生俩个月后,就有繁殖能力 * 一对兔子每个月能生出一对小兔子来 * 如果所有的兔子都不死,那么一年以后总共有多少对兔子*/ /* * 月份 0 1 2 3 4 5 6 * 幼崽 1 1 1 2 3 5 8 * 成年 0 0 1 1 2 3 5 * 总共 1 1 2 3 5 8 13 * */ /* * 接收用户输入的月份 * 计算兔子的对数 * (1)如果经过的月份<2那么兔子的对数为1 * (2)否则用初始的兔子的对数 加上 第一个月的对数为 * 第二个月兔子的个数(an = an-1 +an-2) * 反复使用这个公式,计算出下个月兔子的个数一直到用户输入的月份为止 * 打印的兔子的对数 * */ /* var month = Number(prompt("输入月份")); var sum ; var an =1; var an_1=1; var an_2; if(month < 2){ sum=1; }else{ sum=2; for(var i=1; i<month; i++){ sum= an +an_1; an_1 =an; an = sum; } } alert(sum);*/ /* * 思路2*/ var month = Number(prompt("输入月份")); var rabbit = [1,1]; for(var m=2;m<=month;m++){ rabbit[m]=rabbit[m-1]+rabbit[m-2]; } alert(rabbit[month]); </script>
递推分为顺推和逆推。
穷举
遇到一个问题,找不到更好的解决办法,(找不到数学公式或者规律)时,使用“最笨”的办法,利用计算机计算速度快的特点,将所有可能性全部列出来
并将我们想要得到的结果记录下来
<script> /* * 公鸡一值钱5,鸡母一值钱三,鸡仔三值钱一 * 百钱买百鸡,问公鸡,鸡母、鸡仔各几何? * x y z * x + y + z = 100 * x*5 + y * 3 + z/3 = 100*/ for(var cock=0;cock<=20;cock++){ for(var hen=0;hen<=33;hen++){ var chihen=100-cock-hen; if(100== cock*5+ hen*3+ chihen/3){ document.write("公鸡一共:"+cock+"鸡母一共:"+hen+"小鸡一共:"+chihen+"<br>") } } } </script>
穷举方法的特点:是算法简单,相应的程序也简单,但是计算量往往很大。但是计算机的优势就是运算速度快,所以此算法可以扬长避短,往往可以取得不错的效果。
案例:有一个三位数,个位数字比百位数字大,而百位数字又比十位数字大,并且各位数字之和等于各位数字相乘之积,求此三位数
递归
所谓递归,就是在函数内部又去调用自己。
例如,求阶乘问题,在fact函数内部又去调用fact函数了
<script> /*计算n的阶乘*/ function fact(n){ if(1== n){ return 1 } return n*fact(n-1); } alert(fact(5)); </script>
递归算法如果按照常规思路去理解是非常复杂的,函数调用一层一层嵌套调用,然后又一层一层返回,不妨换个思路去理解递归。
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
以上是JS常用算法累加、迭代、穷举、递归实现(附代码)的详细内容。更多信息请关注PHP中文网其他相关文章!

不同JavaScript引擎在解析和执行JavaScript代码时,效果会有所不同,因为每个引擎的实现原理和优化策略各有差异。1.词法分析:将源码转换为词法单元。2.语法分析:生成抽象语法树。3.优化和编译:通过JIT编译器生成机器码。4.执行:运行机器码。V8引擎通过即时编译和隐藏类优化,SpiderMonkey使用类型推断系统,导致在相同代码上的性能表现不同。

JavaScript在现实世界中的应用包括服务器端编程、移动应用开发和物联网控制:1.通过Node.js实现服务器端编程,适用于高并发请求处理。2.通过ReactNative进行移动应用开发,支持跨平台部署。3.通过Johnny-Five库用于物联网设备控制,适用于硬件交互。

我使用您的日常技术工具构建了功能性的多租户SaaS应用程序(一个Edtech应用程序),您可以做同样的事情。 首先,什么是多租户SaaS应用程序? 多租户SaaS应用程序可让您从唱歌中为多个客户提供服务

本文展示了与许可证确保的后端的前端集成,并使用Next.js构建功能性Edtech SaaS应用程序。 前端获取用户权限以控制UI的可见性并确保API要求遵守角色库

JavaScript是现代Web开发的核心语言,因其多样性和灵活性而广泛应用。1)前端开发:通过DOM操作和现代框架(如React、Vue.js、Angular)构建动态网页和单页面应用。2)服务器端开发:Node.js利用非阻塞I/O模型处理高并发和实时应用。3)移动和桌面应用开发:通过ReactNative和Electron实现跨平台开发,提高开发效率。

JavaScript的最新趋势包括TypeScript的崛起、现代框架和库的流行以及WebAssembly的应用。未来前景涵盖更强大的类型系统、服务器端JavaScript的发展、人工智能和机器学习的扩展以及物联网和边缘计算的潜力。

JavaScript是现代Web开发的基石,它的主要功能包括事件驱动编程、动态内容生成和异步编程。1)事件驱动编程允许网页根据用户操作动态变化。2)动态内容生成使得页面内容可以根据条件调整。3)异步编程确保用户界面不被阻塞。JavaScript广泛应用于网页交互、单页面应用和服务器端开发,极大地提升了用户体验和跨平台开发的灵活性。

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。 1.Python以简洁语法和丰富库生态着称,适用于数据分析和Web开发。 2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)