作者回复: 我这里使用了误差占原值的百分比,来控制迭代的结束
作者回复: 对 很好的补充
作者回复: 确实从数学的角度看是一样的,但是计算机系统本身有局限性。如果left和right都是接近系统设定的最大值,那么两者相加会溢出。如果只加两者差值的一半,那么不会超过两者中较大的值,自然也不会溢出
作者回复: 这是个很好的问题,确实有些地方让人容易糊涂。我这里谈谈自己的理解。
数学里的迭代法,最初是用来求解方程的根,通过不断的更新变量值来逼近最终的解。其思想也被用来计算数列、二分查找等等。我把这种迭代法称为广义的。
而数学归纳法呢,是从理论上证明某个命题成立,从而避免了迭代中的重复计算。下一篇会具体介绍。
而递归就是指“递推”和“回归”,它的递推和数学归纳法非常类似,因此数学归纳法中的递推可以直接翻译为递归的编程。而循环也有递推,不过通常和递归是反向的。
此外,人们常常把编程中的基于循环的实现叫做迭代的实现,用于和递归的实现加以区分。我个人觉得这种迭代的叫法是狭义的。广义的迭代既可以使用循环,也可以使用递归来实现,就像我第3讲的求根和二分查找等,也可以用递归来实现。
作者回复: 很好的心得体会👍
作者回复: 对 其实是精确匹配,匹配后就可以拿到这个词对应的同义或近义词
作者回复: 在编程里,递归的主要特征是方法或函数自己调用自己,因此一般结束条件放在方法内。而基于循环的迭代,如果递推是方法实现的,那确实结束条件是在方法外
作者回复: 厉害了,非常好的生活实例
作者回复: 是的,采用了分而治之的思想
作者回复: 确实是个申请的数字,还研究了好久背后的数学知识
作者回复: 递归式的迭代可以将大问题逐步简化为小问题
作者回复: 这是算相对误差,比如n是100,那么误差为1的时候,误差相对于n的百分比为1%。
作者回复: 因为这里是从1开始,所以(10+1)/2=5.5。之所以从1开始而不是0,是假设我们已经知道0~1之间的数,平方也是小于1,不可能到10。
作者回复: 有些数据库的索引,具体实现的时候可能会用到二分查找