1. 程式人生 > 其它 >第86期-基礎演算法:遞迴 3的冪

第86期-基礎演算法:遞迴 3的冪

1 問題描述

給你一個由 n 個元素組成的整數陣列 nums 和一個整數 k 。
給定一個整數,寫一個函式來判斷它是否是 3的冪次方。如果是,返回 true ;否則,返回 false 。
整數 n 是 3 的冪次方需滿足:存在整數 x 使得 n == 3x

示例 1:

輸入:n = 27
輸出:true

示例 2:

輸入:n = 0
輸出:false

示例 3:

輸入:n = 9
輸出:true

示例 4:

輸入:n = 1
輸出:true

初始程式碼

from typing import List
class Solution:
    def isPowerOfThree(self, n: int) -> bool:
        
#在此之間填寫程式碼 print(Solution().isPowerOfThree(27)) print(Solution().isPowerOfThree(0)) print(Solution().isPowerOfThree(9)) print(Solution().isPowerOfThree(1))
View Code

2 解題思路

  • 標籤:遞迴
  • 判斷該數是否可以整除3,若可以,再判斷除以3後得到的數是否也可以整除3
  • 若可以一直下去直到結果為1,則返回True
  • 其他情況則返回False

#3 解題方法

from typing import List
class Solution:
    
def isPowerOfThree(self, n: int) -> bool: if n==0:return False if n==1:return True return n%3==0 and self.isPowerOfThree(n/3) print(Solution().isPowerOfThree(27)) print(Solution().isPowerOfThree(0)) print(Solution().isPowerOfThree(9)) print(Solution().isPowerOfThree(1))
View Code

第1-3,8-11行:題目中已經給出的資訊,執行程式碼時要根據這些程式碼進行編輯
第4行:判斷若a等於0,則返回False
第5行:判斷若a等於1,則返回True
第6行:其他情況下,若n除以3的餘數為0且除之後得到的數也是3的冪,則返回True,若有一者不滿足,則返回False

程式碼執行結果為:

#演算法講解

這裡用到了基礎演算法:遞迴,簡單講解下這個演算法:
什麼是遞迴
程式呼叫自身的程式設計技巧稱為遞迴
遞迴做為一種演算法在程式設計語言中廣泛應用。


遞迴演算法一般用於解決三類問題:
(1)資料的定義是按遞迴定義的。(Fibonacci函式)
(2)問題解法按遞迴演算法實現。
(3)資料的結構形式是按遞迴定義的。


遞迴函式特徵
必須有一個明確的結束條件;
每次進入更深一層遞迴時,問題規模相比上次遞迴都應有所減少
相鄰兩次重複之間有緊密的聯絡,前一次要為後一次做準備(通常前一次的輸出就作為後一次的輸入)。
遞迴效率不高,遞迴層次過多會導致棧溢位(在計算機中,函式呼叫是通過棧(stack)這種資料結構實現的,每當進入一個函式呼叫,棧就會加一層棧幀,每當函式返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴呼叫的次數過多,會導致棧溢位)