Python遞歸與非遞歸算法的例子,七個練習

練習1

創建一個函數 power來爲任意數字做冪運算n ** i

#遞歸

def power(n,i):
	if i==1:
			return n
	return n*power(n,i-1)
print(power(2,4))

練習2

創建一一個函數,用來檢查一個任意的字符串是否是迴文字符串 ,如果是返回True,否則返回False

#迴文字符串,字符串從前往後念和從後往前念是一樣的 #abcba

#先檢查第一個字符和最後一個字符是否一致,如果不一致則不是迴文字符串
#檢查abcdefgfedcba是不是迴文
#檢查bcdefgfedcb 是不是迴文
#檢查cdefgfedc 是不是迴文
#檢查defgfed 是不是迴文
#檢查efgfe是不是迴文
#檢查fgf是不是迴文
#檢查g是不是迴文

#遞歸

def fn(s):
	if len(s)<2:
		return True
		# print(s)
	elif s[0] != s[-1]:
		return False
	return fn(s[1:-1])
print(fn('abcba'))

練習3,猴子喫桃

第一天摘下若干個桃子,當即吃了一半,又多吃了一個;第二天將剩下的桃子喫掉一半,又多喫1個; # 第三天第四天均是如此, # 到第五天想喫時,只剩下1個。 # 編寫程序計算猴子第一天共摘了多少個桃子。

#非遞歸

n=1
for s in range(4,0,-1):
	#print(s)
	n=(n+1)*2
print(n)

第5天的數量=1;
#第4天的數量=(第5天數量+1)*2
#第3天的數量=(第4天數量+1)*2
#第2天的數量=(第3天數量+1)*2
#第1天的數量=(第2天數量+1)*2

#遞歸

def fn2(n):
	if n==5:
		return 1
	return (fn2(n+1)+1)*2
print(fn2(1))

練習4,斐波那契數列,數列從第3項開始,每一項都等於前兩項之和。試判斷數列第十五個數是哪個?

數列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368…

#遞歸

def fn3(n):
	if n<3:
		return 1
	return fn3(n-1)+fn3(n-2)
print(fn3(15))

練習5,返回1+2+3+4+5+n的和

#非遞歸

n =100
for i in range(1,100):
 	n=n+i
print(n)

#遞歸

def fn4(n):
	if n == 1:
		return 1
	return n+fn4(n-1)
print(fn4(100))

練習6,返回10!

#非遞歸
#109!,98!……2*1!

n=10
for i in range(1,10):
	n=n*i
print(n)

#遞歸

def fn5(n):
	if n==1:
		return 1
	return n*fn5(n-1)
print(fn5(10))

練習7,打印*

#***
#**
#*

#非遞歸

n=6
for x in range(5):
	n=n-1
	print('*'*n)

#遞歸

def fn6(n):
	if n ==1:
		print('*')
	else:
		print('*'*n) 
		fn6(n-1)
fn6(5)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章