迭代法
例:求两个数的最大公约数
辗转相除法:
用较大的数对较小的数取余数,如果余数为0那么最大公约数就是小的那个数。如果不为0那么让除数变为较大的数,余数变为较小的数,继续这样下去直到余数为0.
var num0=Number(prompt("输入一个数"));
var num1=Number(prompt("再输入一个数"));
var res=maxGCD(num0,num1);
alert(res);
function maxGCD(x,y){
var max=Math.max(x,y);
var min=Math.min(x,y);
while(max%min!=0){
var temp=max%min;
max=min;
min=temp;
}
return min;
}
这个就叫迭代法:也叫辗转法。
规律:不断的用旧的值去改变新的值,直到想要得到的结果。
套路:
(1) 找到迭代的变量(旧的值)被除数、除数和余数
(2) 确定迭代的关系 直接赋值
(3) 迭代的条件 余数不等于0
作业:求一个数的算术平方根(牛顿法)
var num=Number(prompt("请输入一个数"));
var k=1;
while(Math.abs(k*k-num)>1e-9){
k=(k+num/k)/2;
}
document.write(k);
递推:
兔子产子问题:
一般来说:兔子在出生2个月后就能生崽
一对兔子每个月能生出一对兔子
最开始有一对刚出生的兔子
假设所有的兔子都不死,问一年后多少对兔子
月份 |
0 |
1 |
2 |
3 |
4 |
5 |
总和 |
1 |
1 |
2 |
3 |
5 |
8 |
var arr=[1,1];
for(var i=2;i<12;i++){