1、漢諾塔問題:
複雜度:
f(n)=f(n-1)+1+f(n-1)
n層:2^n-1步
def func(n,fromm,to,help):
if n==1:
print("move"+" "+str(1)+" "+"from"+" "+fromm+" "+"to"+" "+to)#base case
else:
func(n-1,fromm,help,to) #將n-1層從fromm挪到help
print("move"+" "+str(n)+" "+"from"+" "+fromm+" "+"to"+" "+to) #第n層單獨挪動
func(n-1,help,to,fromm) #將n-1層從help挪到
func(3,"left","right","mid")
2、列印字串的子串行:(順序一樣,可以不連續)
def func(arr,i,pre):
if (i==len(arr)):
if pre!="":
print(pre)
return
func(arr,i+1,pre+arr[i])
func(arr,i+1,pre)
arr="abc"
arr="".join(arr)
func(arr,0,"")
3、列印字串的全排列:(去重)
思想:
i位置把(i,n-1)位置所有字元嘗試一遍(和每個位置交換),位置之後的隨機排列
def printallpermutation(arr,i):
if i==len(arr):
print((''.join(arr)))
m= #去重
for j in range(i,len(arr)):
if arr[j] not in m: #去重
arr[i],arr[j]=arr[j],arr[i]
printallpermutation(arr,i+1)
arr[i], arr[j] = arr[j], arr[i]
arr1=list("abc")
arr2=list("acc")
printallpermutation(arr1,0)
print("----------")
printallpermutation(arr2,0)
4、問題:
有乙隻母牛,一年生乙隻母牛,新母牛三年後一年生乙隻母牛,母牛六年後死亡,n年後有多少只母牛?
思路:
f(n)=f(n-1)+f(n-3)-2*f(n-6) #減去6年前的母牛個數還有孩子個數,乘2
**:
def count(n):
if n<1:
return 0
if n<=3:
return n
if n<6:
return count(n-1)+count(n-3)
return count(n-1)+count(n-3)-2*count(n-6)
print(count(7))
5、逆序乙個棧(不占用額外空間)
def getandremovelastelement(stack): #得到棧底元素並返回
result=stack.pop()
if not stack:
return result
else:
last=getandremovelastelement(stack)
return last
def reverse(stack):
if not stack:
return
i=getandremovelastelement(stack)
reverse(stack)
s=[3,2,1]
reverse(s)
print(s)
Python 函式練習(包括簡單遞迴)
list sort key none reverse false reverse 排序規則,reverse true 降序,reverse false 公升序 預設 p a b c 2 s sqrt p p a p b p c s axjnxk print s 1 s abc for i in s ...
Python 練習例項28 遞迴求年齡
題目 有5個人坐在一起,問第五個人多少歲?他說比第4個人大2歲。問第4個人歲數,他說比第3個人大2歲。問第三個人,又說比第2人大兩歲。問第2個人,說比第乙個人大兩歲。最後問第乙個人,他說是10歲。請問第五個人多大?程式分析 利用遞迴的方法,遞迴分為回推和遞推兩個階段。要想知道第五個人歲數,需知道第四...
python練習 使用遞迴函式實現階乘
遞迴函式 乙個函式在內部呼叫自己本身 自己呼叫自己 考慮什麼時候跳出階乘 1 1 2 2 1 3 3 2 n n n 1 def factorial n if n 1 return 1 函式遇到return結束執行 else return n factorial n 1 result factori...