python遞迴實現 遞迴演算法 python實現

2021-10-18 15:58:00 字數 2564 閱讀 1743

在函式的定義中對這個函式自身的呼叫,就是遞迴。

遞迴結構中,遞迴的部分必須比原來的整體簡單,才有可能到達某種終結點(出口)。而且必須存在非遞迴的基本結構構成的部分,否則會無限遞迴。

學習目標:程式設計實現斐波那契數列求值 f(n)=f(n-1)+f(n-2)

程式設計實現求階乘 n!

程式設計實現一組資料集合的全排列leetcode 46. 全排列

leetcode 47. 全排列 ii

leetcode 70. 爬樓梯

以上問題都可以用遞迴來解決。

斐波那契數列由 0 和 1 開始,後面的每一項數字都是前面兩項數字的和。

[0,1,1,2,3,5,8,13,...] 給定n,計算 f(n)

方法15class :

def fib(self, n: int) -> int:

if n <= 1:

return n

return self.fib(n-1) + self.fib(n-2)

動態規劃方法參見:動態規劃

求階乘 n!1

8def factorial(n):

if n == 0 or n == 1:

return 1

else:

return (n*factorial(n-1))

a = factorial(3)

print(a)

輸出:6

leetcode 46. 全排列

給定乙個沒有重複數字的序列,返回其所有可能的全排列。

示例輸入: [1,2,3]輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]

方法每次選擇乙個數出來,然後把剩下的數,再選擇乙個出來,依次類推,選到頭,就回溯到上一層。1

11class :

def permute(self, nums: list[int]) -> list[list[int]]:

res =

def dfs(nums = nums, path = ):

if not nums:

for i in range(len(nums)):

dfs(nums[:i]+nums[i+1:], path+[nums[i]])

dfs()

return res

leetcode 47. 全排列 ii

給定乙個可包含重複數字的序列,返回所有不重複的全排列。

示例:輸入: [1,1,2]輸出: [ [1, 1, 2], [1, 2, 1], [2, 1, 1] ]

方法相比上一題,多了排序和內部的重複判斷。1

14class :

def permuteunique(self, nums: list[int]) -> list[list[int]]:

nums.sort()

res =

def dfs(nums = nums, path=):

if not nums:

for i in range(len(nums)):

if i>0 and nums[i] == nums[i-1]:

continue

dfs(nums[:i]+nums[i+1:], path+[nums[i]])

dfs()

return res

leetcode 70. 爬樓梯

假設你正在爬樓梯。需要 n 階你才能到達樓頂。

每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?

注意:給定 n 是乙個正整數。

示例 :1

6輸入: 3

輸出: 3

解釋: 有三種方法可以爬到樓頂。

1. 1 階 + 1 階 + 1 階

2. 1 階 + 2 階

3. 2 階 + 1 階

方法:遞迴

當有n個台階時,可供選擇的走法可以分兩類:1,先跨一階再跨完剩下n-1階;2,先跨2階再跨完剩下n-2階。所以n階的不同走法的數目是n-1階和n-2階的走法數的和。 這和斐波那契數列的規律相同,可以用這個思路。1

9class :

def climbstairs(self, n):

:type n: int

:rtype: int

if n<=2:

return n

return self.climbstairs(n-1) + self.climbstairs(n-2)

這個方法執行正常,但是因為超出時間限制,未能通過。

方法:動態規劃

動態規劃來記錄歷史資料。1

10class :

def climbstairs(self, n):

:type n: int

:rtype: int

prev, current = 0, 1

for i in range(n):

prev, current = current, prev + current

return current

python實現遞迴演算法

usr bin env python coding utf 8 def recursive 1 n 樓梯有n階台階,上樓可以一步上3階,也可以一步上5階,計算共有多少種不同的走法?設n階台階的走法數為f n 如果台階數小於等於3,走法有2種 一步上3個台階或者5個台階 即f n 3 2 如果台階數為...

Python 實現遞迴演算法

1 遞迴的定義 遞迴就是子程式 或函式 直接呼叫自己或通過一系列呼叫語句間接呼叫自己,是一種描述問題和解決問題的基本方法。遞迴常與分治思想同時使用,能產生許多高校的演算法。遞迴常用來解決結構相似的問題。所謂結構相似,是指構成原問題的子問題與原問題在結構上相似,可以用類似的方法解決。具體地,整個問題的...

python遞迴 演算法 遞迴(Python解釋)

通俗一點來說,遞迴就是一種在函式內呼叫自己的演算法。每一級呼叫都會有自己的引數。每一次呼叫都會有一次返回。可能是返回自己,繼續遞迴 也可能是返回特定值,結束遞迴。遞迴解釋 優點 直觀,實現簡單,可讀性好。缺點 會有重複的呼叫 優化裡會說明 占用空間大,遞迴太深,會造成棧溢位 呼叫太多,不給你呼叫了 ...