热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java递归实现汉字组词穷举_Javascript迭代、递推、穷举、递归常用算法实例讲解...

累加和累积累加:将一系列的数据加到一个变量里面。最后的得到累加的结果比如:将1到100的数求累加和小球从高处落下,每次返回到原来一半&#x

累加和累积

累加:将一系列的数据加到一个变量里面。最后的得到累加的结果

比如:将1到100的数求累加和

小球从高处落下,每次返回到原来一半,求第十次小球落地时小球走过的路程

var h=100;

var s=0;

for(var i&#61;0;i<10;i&#43;&#43;){

h&#61;h/2;

s&#43;&#61;h;

}

s&#61;s*2&#43;100;

累积&#xff1a;将一系列的数据乘积到一个变量里面&#xff0c;得到累积的结果。

常见的就是n的阶乘

var n&#61;100;

var result&#61; 1;

for(var i&#61;1;i<&#61;n;i&#43;&#43;){

result*&#61;i;

}

一般形式&#xff1a;

累加&#xff1a;V &#43;&#61;e;

累积&#xff1a;v*&#61;e&#xff1b;

V代表累加和累积&#xff0c;e代表累加/累积项

算法要点&#xff1a;

(1)   初始化

初始化v和e

累加&#xff1a;v &#61; 0&#xff1b;

累积&#xff1a;v &#61; 1&#xff1b;

e的初始化&#xff0c;如果累加/积项比较复杂&#xff0c;可能会分解为几个子项分别初始化&#xff0c;比如计算圆周率的问题&#xff0c;累计项分解为符号、分子和分母三部分。

(2)   循环的控制条件

一种是固定的次数&#xff0c;比如计算弹跳距离的问题&#xff0c;计算数列前20项之和的问题&#xff0c;

次数不固定&#xff0c;而是要满足某个条件&#xff1a;计算圆周率问题要求最后一项的绝对值&#xff0c;要小于10-6。

(3)   确定累加/积项的变化

比如数列的前20项之和&#xff0c;是将当前的分子分母之和作为下一次的分母&#xff0c;当前的分母作为分子。

再比如求圆周率问题&#xff0c;是将符号取反、分母加2&#xff0c;然后的出下一项。

迭代

迭代法也就是辗转法

规律&#xff1a;就是可以不断地用旧的值得到新的值&#xff0c;直到我们想要的得到的结果。

遇到了迭代的问题怎么解决

1.  找到迭代的变量(旧的值)

2.  确定迭代的关系

3.  知道想要的结果是什么(结束循环的条件)

(1)  就是知道最终结果

(2)  循环的次数

/*

* 1.接受用户输入的俩个数

* 2.一个函数的到最大公约数

* 3.打印这个最大公约数*/

varnum1 &#61; Number(prompt("请输入一个数"));

var num2 &#61; Number(prompt("请输入一个数"));

var result &#61; GCD(num1,num2);

alert(result);

/*

* 函数的功能&#xff1a;得到最大公约数

* 函数名&#xff1a;GCD

* 函数的参数&#xff1a;俩个整数

* 返回值&#xff1a;最大公约数*/

/*

* 如果num1

* 计算余数

* 当num1(除数)&#xff0c;对num2(被除数)的余数不为0&#xff0c;重复一下步骤

* num2&#61;>num1,

* 余数&#61;>num2

* 重新计算余数

* 最终的到最大公约数&#xff0c;也就是num2的值*/

functionGCD(num1,num2){

/*return0;*/

if(num1

var t &#61; num1;

num1&#61;num2;

num2 &#61; t;

}

var remainder &#61; num1%num2;

while(remainder!&#61; 0){

num1&#61;num2;

num2&#61; remainder;

remainder&#61;num1%num2;

}

returnnum2;

}

递推

找到数学规律&#xff1a;通过公式计算到下一项的值&#xff0c;一直到我们要的结果为止

例如&#xff1a;兔子产子&#xff1a;通过前俩项得到下一项

/*

* 一般而言&#xff0c;兔子在出生俩个月后&#xff0c;就有繁殖能力

* 一对兔子每个月能生出一对小兔子来

* 如果所有的兔子都不死&#xff0c;那么一年以后总共有多少对兔子*/

/*

* 月份 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 &#61; an-1 &#43;an-2)

* 反复使用这个公式&#xff0c;计算出下个月兔子的个数一直到用户输入的月份为止

* 打印的兔子的对数

* */

/* var month &#61; Number(prompt("输入月份"));

var sum ;

var an &#61;1;

var an_1&#61;1;

var an_2;

if(month <2){

sum&#61;1;

}else{

sum&#61;2;

for(var i&#61;1; i

sum&#61; an &#43;an_1;

an_1 &#61;an;

an &#61; sum;

}

}

alert(sum);*/

/*

* 思路2*/

varmonth &#61; Number(prompt("输入月份"));

var rabbit &#61; [1,1];

for(varm&#61;2;m<&#61;month;m&#43;&#43;){

rabbit[m]&#61;rabbit[m-1]&#43;rabbit[m-2];

}

alert(rabbit[month]);

递推分为顺推和逆推。

穷举

遇到一个问题&#xff0c;找不到更好的解决办法&#xff0c;(找不到数学公式或者规律)时&#xff0c;使用“最笨”的办法&#xff0c;利用计算机计算速度快的特点&#xff0c;将所有可能性全部列出来

并将我们想要得到的结果记录下来

script>

/*

* 公鸡一值钱5&#xff0c;鸡母一值钱三&#xff0c;鸡仔三值钱一

* 百钱买百鸡&#xff0c;问公鸡&#xff0c;鸡母、鸡仔各几何&#xff1f;

* x y z

* x &#43; y &#43; z &#61; 100

* x*5 &#43; y * 3 &#43; z/3 &#61; 100*/

for(varcock&#61;0;cock<&#61;20;cock&#43;&#43;){

for(varhen&#61;0;hen<&#61;33;hen&#43;&#43;){

var chihen&#61;100-cock-hen;

if(100&#61;&#61; cock*5&#43; hen*3&#43; chihen/3){

document.write("公鸡一共&#xff1a;"&#43;cock&#43;"鸡母一共&#xff1a;"&#43;hen&#43;"小鸡一共&#xff1a;"&#43;chihen&#43;"
")

}

}

}

穷举方法的特点&#xff1a;是算法简单&#xff0c;相应的程序也简单&#xff0c;但是计算量往往很大。但是计算机的优势就是运算速度快&#xff0c;所以此算法可以扬长避短&#xff0c;往往可以取得不错的效果。

案例&#xff1a;有一个三位数&#xff0c;个位数字比百位数字大&#xff0c;而百位数字又比十位数字大&#xff0c;并且各位数字之和等于各位数字相乘之积&#xff0c;求此三位数

递归

所谓递归&#xff0c;就是在函数内部又去调用自己。

例如&#xff0c;求阶乘问题&#xff0c;在fact函数内部又去调用fact函数了

/*计算n的阶乘*/

functionfact(n){

if(1&#61;&#61; n){

return1

}

returnn*fact(n-1);

}

alert(fact(5));

递归算法如果按照常规思路去理解是非常复杂的&#xff0c;函数调用一层一层嵌套调用&#xff0c;然后又一层一层返回&#xff0c;不妨换个思路去理解递归。

递归实际上就是将规模为n的问题降价为n-1的问题进行求解。也就是去找n和n-1之间的关系。

总结

以上就是这篇文章的全部内容了&#xff0c;希望本文的内容对大家的学习或者工作具有一定的参考学习价值&#xff0c;谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接



推荐阅读
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • JavaScript设计模式之策略模式(Strategy Pattern)的优势及应用
    本文介绍了JavaScript设计模式之策略模式(Strategy Pattern)的定义和优势,策略模式可以避免代码中的多重判断条件,体现了开放-封闭原则。同时,策略模式的应用可以使系统的算法重复利用,避免复制粘贴。然而,策略模式也会增加策略类的数量,违反最少知识原则,需要了解各种策略类才能更好地应用于业务中。本文还以员工年终奖的计算为例,说明了策略模式的应用场景和实现方式。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
author-avatar
exd4665786
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有