生活中的数据结构

题目:话说有1000个瓶子,其中999瓶水,1瓶有毒,外观没有任何区别。现在有10只小白鼠和无限多的干净试管,如何找出那瓶毒药?

知识点:就是二分法的应用

分析:由于2^10 > 1000,因此可以这样解决:

第一次:任意拿出500瓶混合到一支试管中,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪500瓶中;最多耗费第一只小白鼠;2

第二次:将有毒的500瓶分成250瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪250瓶中;最多耗费第二只小白鼠;2

第三次:将有毒的250瓶分成125瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪125瓶中;最多耗费第三只小白鼠;2

第四次:将有毒的125瓶分成63瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪63瓶中;最多耗费第四只小白鼠;2

第五次:将有毒的63瓶分成32瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪32瓶中;最多耗费第五只小白鼠;2

第六次:将有毒的32瓶分成16瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪16瓶中;最多耗费第六只小白鼠;2

第七次:将有毒的16瓶分成8瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪8瓶中;最多耗费第七只小白鼠;2

第八次:将有毒的8瓶分成4瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪4瓶中;最多耗费第八只小白鼠;2

第九次:将有毒的4瓶分成22瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪2瓶中;最多耗费第九只小白鼠;2

第十次:将有毒的2瓶分成1瓶一份,拿一只小白鼠试吃,两种结果,有毒鼠死,无毒鼠活;无论结果如何,都可以判断出毒药在哪1瓶中;最多耗费第十只小白鼠;2

递归算法其实就是:

if()

原文地址:https://www.cnblogs.com/guochaoxxl/p/14278705.html