现在让我们回到二分查找算法。
变的和不变的代码
前面我们讲了二分查找的流程及代码实现。
我们实现二分查找的目的是为了用它来在任意数列中查找任意的数字,查找过程是不变的。而待查数列和目标数,却是时时要变的。
可惜,在前面的实现代码里,存储待查数列的列表arr和目标数tn这两个变量在程序中被直接赋值。如果要改变他们的值,就要改写代码,给它们做重新的赋值。
当然,这样做运行是没有问题。但是有的时候,经常改完了arr就忘了改tn了,容易顾此失彼。
能不能把应该不变的查找过程,和随时可变的数列及目标数的代码分隔开呢?
可以,这就要涉及到一个新的编程概念:函数!
数学中的函数
在数学里,函数是两个集合之间的一个映射,或者说是一种对应关系:输入值集合中的每个元素都能对应到唯一的一个输出值集合中的元素(反之未必)。
一个函数就好像一个黑盒,或者一部机器,我们把输入值当作原料倒进去,经过内部的一番映射过程,就会产生出输出值来。
用图形描述起来,就像下图这样: