記錄一道遞迴的面試題
阿新 • • 發佈:2018-12-09
今天去面試,碰到一道要求用遞迴實現的面試題,當時沒想到,很可惜,特此記錄一下。
題目:1元1瓶水,2空瓶1瓶水,3瓶蓋1瓶水,計算20元能買多少瓶水?
答案如下:
/** * 1元1瓶水,2空瓶1瓶水,3瓶蓋1瓶水,20元多少瓶水 * * @param total 水的總數 * @param b 空瓶 * @param l 瓶蓋 */ public static void cntTableWater(int total, int b, int l) { // 初始化水、空瓶、瓶蓋數量 int water = total, bottle = b, lid = l; // 產生的新的水 int newWater = bottle / 2 + lid / 3; // 新的空瓶和瓶蓋 bottle = newWater + bottle % 2; lid = newWater + lid % 3; // 將消耗的水累計 water += newWater; // 已經無法兌換,則輸出消耗的水 if (bottle < 2 && lid < 3) System.out.println(water); else cntTableWater(water, bottle, lid); }
最後,執行結果是113,即可以買113瓶水。程式計算很簡單,只是每次累計空瓶和瓶蓋兌換的水的數量即可。