1. 程式人生 > >記錄一道遞迴的面試題

記錄一道遞迴的面試題

  今天去面試,碰到一道要求用遞迴實現的面試題,當時沒想到,很可惜,特此記錄一下。

  題目: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瓶水。程式計算很簡單,只是每次累計空瓶和瓶蓋兌換的水的數量即可。