某山頂上有一顆香蕉樹,一隻猴子第一天從樹上摘了若干根香蕉,立即就吃了一半,還不過癮,又多吃了一根。次日猴子又將剩下的香蕉吃了一半,禁不住誘惑,又多吃了一根香蕉。依此類推,天天都將剩餘的香蕉吃一半後再多吃一根。到了第九天,猴子發現只剩一根香蕉了,請問這隻猴子在第一天總共摘了多少根香蕉?
這個問題,咱們能夠從後往前推導,由於第九天僅剩一根香蕉,並且是由於前一天吃了一半後再多吃一根的結果,那麼首先假設若是把多吃的一根還原回去的話(1+1=2),就等於只吃了一半的結果,也就是第八天吃了一半的狀況下還剩餘兩根,而兩根僅是第八天的一半(22=4),最後得出第八天的數量爲四根香蕉。依此類推,(4+1)2=10,第七天就是十根香蕉。推導效果如圖3-4所示,得出推導公式爲(n+1)*2,能夠得到前一天的香蕉數量。當你找到正確算法後,就能夠使用循環語句屢次推導便可獲得第一天的香蕉數量。
推導演示以下圖
具體腳本以下:算法
[root@centos7 ~]# vim monkey.sh #!/bin/bash #功能描述(Description):使用循環計算猴子吃香蕉的問題. #初始化香蕉數量爲1,也就是第九天香蕉數位1. #每循環一次計算前一天的香蕉數量,循環8次獲得第一天的香蕉數量. banana=1 for i in {1..8} do banana=$[(banana+1)*2] done echo $banana [root@centos7 ~]# chmod +x monkey.sh [root@centos7 ~]# ./monkey.sh 766