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))
print(’*’*30)

练习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))
print(’*’*30)

练习6,返回10!

#非递归
#109!,98!……21!
n=10
for i in range(1,10):
n=n
i
print(n)

#递归
def fn5(n):
if n==1:
return 1
return nfn5(n-1)
print(fn5(10))
print(’
’*30)

练习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)

发布了1 篇原创文章 · 获赞 1 · 访问量 11

猜你喜欢

转载自blog.csdn.net/weixin_46227398/article/details/104815263