題目:
給定一個非負整數,回傳將其減少到零的步驟數。如果當前的數字是偶數,你要除以2,否則,你必須從中減去1
來源:力扣(LeetCode)鏈接:https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-to-zero
遞回代碼:
int numberOfSteps (int num)
{
if(num%2==0) return numberOfSteps(num/2)+1;
if(num==1) return 1;
return numberOfSteps(num-1)+1;
}
為什么要加1呀?
uj5u.com熱心網友回復:
不減1,你反悔的資料就會少1,最簡單的是帶入一個資料,去驗證一下程式,你就會發現1的用處uj5u.com熱心網友回復:
舉例容易,可是我理解的好困難呀
uj5u.com熱心網友回復:
如果當前數字是偶數,需要把它除以 2 ;如果是奇數,需要減去 1。
如果是偶數,
numberOfSteps(num/2)的次數比numberOfSteps(num)少一次
如果是奇數,
numberOfSteps(num -1)的次數比numberOfSteps(num)少一次
遞回到1的時候
就是直接回傳1了。
凡遞回,就是處理本輪和前一輪的邏輯關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/148977.html
標籤:C語言
