對於今天的算法,咱們要寫一個叫作 utopianTree
的函數,它只接受一個輸入:一個整數 n
。javascript
咱們有一棵烏托邦樹,每一年要經歷2個增加週期。在春季,高度增長一倍,在夏季,高度增長1(不管您要使用哪一種測量系統)。該函數的目的是輸出樹通過必定數量的生長週期後的高度。前端
若是咱們想知道樹在5個生長週期後的高度,請按如下方法計算樹的高度:java
let n = 5;
咱們的輸入 n
是一個變量,它保存了生長週期的數量,咱們從生長週期 0
開始計算樹的高度。git
在週期 0
處,樹的初始高度爲 1
。算法
在週期 1 時,樹的高度加倍,所以其高度如今爲 2
。segmentfault
在週期 2 中,樹的高度增長 1
,樹的高度爲 3
。微信
在週期 3 中,樹的高度再次加倍,所以樹的高度如今爲 6
。前端工程師
在週期 4 時,樹的高度增長 1
,樹的高度如今爲 7
。函數
在最後一週期中,樹的高度加倍,使樹的高度爲 14
。學習
該函數將輸出 14
。
在看咱們如何獲得答案時,咱們開始看到一種模式。若是週期數是奇數,則從週期 1
開始,樹的高度加倍;若是是偶數,則樹的高度僅增長1。
讓咱們將其轉換爲代碼,咱們建立變量:
let cycle = 1; let height = 1;
咱們的週期(cycle
)變量將幫助咱們在每一個生長週期(從1到 n
)計數時跟蹤樹的高度。
height
變量將保存樹的高度,該函數將輸出此變量,咱們從1開始計數,由於那是樹的初始高度。
接下來,咱們使用while循環:
while (cycle <= n){ if(cycle % 2 !== 0 ){ height *= 2; }else{ height++; } cycle++; }
咱們但願while循環繼續循環直到 cycle
變量不大於輸入 n
。
在上面的示例中,咱們注意到,若是生長週期爲奇數,則樹的高度將加倍。所以,不管樹的當前高度是多少,咱們都將其乘以2。
若是生長週期是偶數,咱們將樹的高度增長1。
循環通過if語句後,咱們增長 cycle
變量,以便咱們能夠在下一個生長循環中測量樹的高度。
循環完成後,咱們返回height變量。
return height;
到此結束咱們的算法。這是完整的代碼:
function utopianTree(n) { let cycle = 1; let height = 1; while (cycle <= n){ if(cycle % 2 !== 0 ){ height *= 2; }else{ height++; } cycle++; } return height; }
原文:https://levelup.gitconnected....
翻譯:杜尼卜
若是對你有所啓發和幫助,能夠點個關注、收藏,也能夠留言討論,這是對做者的最大鼓勵。
做者簡介:Web前端工程師,全棧開發工程師、持續學習者。
如今關注《前端外文精選》微信公衆號,還送某網精品視頻課程網盤資料啊,準能爲你節省很多錢!