算法
来源:互联网 发布:影视cms系统哪个好 编辑:程序博客网 时间:2024/06/10 22:14
算法
1.累加/累积
初始化:初值一般为0或者1.累加为0,累积为1.
循环控制条件:一种是固定次数;次数不固定,当满足条件是结束循环
确定累加/积项的变化:
var num = Number(prompt("请输入一个自然数")); var sum = 0; for(var i = 1;i <= num;i ++){ sum += i; } document.write(sum);
2.迭代
也叫辗转法。
规律:可以不断地用旧的值去得到新的值,一直到我们想要得到的结果。
1)找到迭代的值(旧值)
2)确定迭代的关系
3)知道想要的结果是什么
案例:
var num1 = Number(prompt("输入整数num1")); var num2 = Number(prompt("输入整数num2")); var result; if(num1%num2 == 0){ result = num2; } else{ result = getGCD(num1,num2); } document.write(result); function getGCD(num1,num2){ var t; while(num1%num2){ t = num1%num2; num1 = num2; num2 = t; } return t; }
3.递推
通过数学规律,通过公式计算到下一项的值,直到我们想要的结果为止。
例如:兔子产子
var month = Number(prompt("请输入月份"));var a = 1;var b = 1;var sum ;if(month < 2){ sum = 1;}else{ sum = getSum(a,b,month);}document.write(sum);//function getSum(a,b,month){ for(var i = 1;i < month;i ++){ sum = a + b; a = b; b = sum; } return sum;}
4.穷举
找不到数学规律,使用最笨的办法,穷举,利用计算机速度快的特点,将所有可能性全部列出来,并将我们想要的结果记录下来。
例子:百钱白鸡
for(var cock = 0;cock <=20;cock++){ for(var hen = 0;hen < 33;hen++){ var chicken = 100-cock-hen; if(((100-5*cock-3*hen)*3 == chicken)){ document.write("鸡公" + cock + ","); document.write("鸡母" + hen+ ","); document.write("小鸡" + chicken); document.write("<br>"); } }}
5.递归
递归按照思路是复杂的,函数一层层调用,一层一层嵌套,然后又一层一层返回。
递归实际上就是寻找n与n-1的关系,也就是降幂。
案例:猴子称大
var n = Number(prompt("请输入自然数n"));var a = fun(n);document.write(a);function fun(n){ if(n == 1){ return 1; } return (fun(n-1)+2)%n + 1;}
总结
算法都是需要找到规律的,累加/累积、迭代、递推、递归、穷举都是有规律才能计算的。
累加/累积是需要找到项与项之间的关系,找打循环关系。
迭代是找到新的值替代旧的值,当满足我们的条件时输出我们的结果。
递推是通过前面几项得到下一项,然后当满足我们的条件时就输出结果。
递归是函数本身调用本身,这个很麻烦。但是大部分函数都可以使用递归来解决。这个递归就是要找到规律,找到相邻两项之间的关系。
穷举这个算法很奇特,这个算法是当我们找不到规律时,但是我们又能完全列举出来的时候使用。这个算法是使用了计算机运行速度快的特点,虽然循环次数较多,但是计算机快啊,所以次数都不成问题。