热门标签 | 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;谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接



推荐阅读
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社区 版权所有