第87期-基礎演算法:遞迴 2的冪
阿新 • • 發佈:2022-01-06
1 問題描述
給你一個整數 n,請你判斷該整數是否是 2 的冪次方。如果是,返回 true ;否則,返回 false 。
如果存在一個整數 x 使得n == 2x ,則認為 n 是 2 的冪次方。
示例 1:
輸入:n = 1
輸出:true
解釋:2**0 = 1
示例 2:
輸入:n = 16
輸出:true
解釋:2**4 = 16
示例 3:
輸入:n = 3
輸出:false
示例 4:
輸入:n = 4
輸出:true
示例 5:
輸入:n = 5
輸出:false
初始程式碼
from typing import List class Solution:View Codedef isPowerOfTwo(self, n: int) -> bool: #在此之間填寫程式碼 print(Solution().isPowerOfTwo(1)) print(Solution().isPowerOfTwo(16)) print(Solution().isPowerOfTwo(3)) print(Solution().isPowerOfTwo(4)) print(Solution().isPowerOfTwo(5))
2 解題思路
- 標籤:遞迴
- 判斷該數是否可以整除2,若可以,再判斷除以2後得到的數是否也可以整除2
- 若可以一直下去直到結果為1,則返回True
- 其他情況則返回False
#3 解題方法
from typing import List class Solution: def isPowerOfTwo(self, n: int) -> bool: if n==0:return False if n==1:return True return n%2==0 and self.isPowerOfTwo(n/2) print(Solution().isPowerOfTwo(1)) print(Solution().isPowerOfTwo(16)) print(Solution().isPowerOfTwo(3))View Codeprint(Solution().isPowerOfTwo(4)) print(Solution().isPowerOfTwo(5))
第1-3,8-12行:題目中已經給出的資訊,執行程式碼時要根據這些程式碼進行編輯
第4行:判斷若a等於0,則返回False
第5行:判斷若a等於1,則返回True
第6行:其他情況下,若n除以2的餘數為0且除之後得到的數也是2的冪,則返回True,若有一者不滿足,則返回False
程式碼執行結果為:
#演算法講解
這裡用到了基礎演算法:遞迴,簡單講解下這個演算法:
什麼是遞迴
程式呼叫自身的程式設計技巧稱為遞迴
遞迴做為一種演算法在程式設計語言中廣泛應用。
遞迴演算法一般用於解決三類問題:
(1)資料的定義是按遞迴定義的。(Fibonacci函式)
(2)問題解法按遞迴演算法實現。
(3)資料的結構形式是按遞迴定義的。
遞迴函式特徵
必須有一個明確的結束條件;
每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入)。
遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入一個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)