⼈类做重复性的劳动没有效率,⽽计算机却能更快更准确的完成重复性劳动。所以以重复为特点的迭代法在编程中有着⼴泛的应⽤。实际项目中是否可以用不断更新变量值或者缩小搜索的区间范围的方法,来获得最终的解(或近似解、局部最优解)?如果是,那么你就可以尝试迭代法。
还记的那个有名的麦子故事吗?
古印度国王舍罕酷爱下棋,他打算重赏国际象棋的发明⼈宰相⻄萨·班·达依尔。这位聪明的⼤⾂指着象棋盘对国王说:“陛下,我不要别的赏赐,请您在这张棋盘的第⼀个⼩格内放⼊⼀粒⻨⼦,在第⼆个⼩格内放⼊两粒,第三⼩格内放⼊给四粒,以此类推,每⼀⼩格内都⽐前⼀⼩格加⼀倍的⻨⼦,直⾄放满64个格⼦,然后将棋盘上所有的⻨粒都赏给您的仆⼈我吧!”
国王⾃以为⼩事⼀桩,痛快地答应了。可是,当开始放⻨粒之后,国王发现,还没放到第⼆⼗格,⼀袋⻨⼦已经空了。随着,⼀袋⼜⼀袋的⻨⼦被放⼊棋盘的格⼦⾥,国王很快看出来,即便拿来全印度的粮⻝,也兑现不了对达依尔的诺⾔。
放满这64格到底需要多少粒麦子?这是个相当⼤的数字,在数学上是有对应⽅法的,就是
迭代法(Iterative Method)
迭代法,简单说就是:不断用旧的变量值,递推计算新的变量值。
回到刚才的故事:要求每⼀格的麦子都是前⼀格的两倍,那么前⼀格里麦子的数量就是旧的变量值,可以先记作 X n − 1 X_{n-1} X