資料結構與演算法遞迴
class
solution
:def
factorial
(self,n)
:if n ==1:
return
1else
:return n*factorial(n-
1)
# 如果查詢的資料是有序的,二分查詢演算法比順序查詢演算法更高效
defbinary_search
(nums,v)
: nums.sort(
) n =
len(nums)
start =
0 end = n-
1while start < end:
mid =
(start + end)//2
if nums[mid]
== v:
return
true
elif nums[mid]
> v:
end = mid -
1elif nums[mid]
< v:
start = mid +
1return
false
def
binary_search
(nums,v)
: nums.sort(
) n =
len(nums)
mid = n//
2if nums[mid]
== v:
return
true
elif nums[mid]
> v:
return binary_search1(nums[
0:mid-1]
,v)else
:return binary_search1(nums[mid+
1:n-1]
,v)
rom random import randint
deffactors
(num, fac =
):# 每次都從2開始找因數
for i in
range(2
,int
(num**
0.5)+1
):if num%i==0:
factors(num//i,fac)
break
else
:# 不可分解了,自身也是個因數
facs =
n=randint(2,
10**8)
factors(n,facs)
result =
'*'.join(
map(
str,facs)
)if n ==
eval
(result)
:print
(n,'='
+result)
# 89295880 =2*2*2*5*797*2801
def
merge_sort
(nums)
: n =
len(nums)
if n <=1:
return nums
mid = n //
2 left_li = merge_sort(nums[
0:mid]
) right_li = merge_sort(nums[mid:])
result =
left_point,right_point =0,
0while left_point <
len(left_li)
and right_point <
len(right_li)
:if left_li[left_point]
< right_li[right_point]:)
left_point +=
1else:)
right_point +=
1 result += left_li[left_point:
] result += right_li[right_point:
]return result
資料結構之遞迴
本篇是資料結構與演算法之美學習筆記 遞迴在電腦科學中指一種通過將重複問題分解為同列子問題來解決問題的方法。遞迴是一種常見的演算法或者程式設計技巧。很多資料結構和演算法的編碼實現都會使用到遞迴,比附dfs深度搜尋,前中後序二叉樹遍歷等等。遞迴需要滿足三個條件 1.乙個問題的解可以分成幾個解。子問題就是...
資料結構之遞迴
程式呼叫自身的程式設計技巧稱為遞迴 recursion 遞迴做為一種演算法 在程式語言中廣泛應用。乙個過程或函函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,...
資料結構之遞迴
遞迴的四條基本準則 基準情形 必須總要有某些基準情形,它無需遞迴就能解出 不斷推進 對於那些需要遞迴求解的情形,每一次遞迴呼叫都必須使狀況朝向一種基準情形推進 設計法則 假設所有的遞迴呼叫都能執行 合成效益法則 在求解乙個問題的同一例項時,切勿在不同的遞迴呼叫中做重複性的工作。例 求整數的二進位制中...