定义递归两个条件递归三要素例子
n的阶乘判断回文字符串洛谷 P1427 小鱼的数字游戏球路程猴吃桃字符串反转 定义
递归是将一个大问题分解为一个小小问题,直到问题无法分解,再去解决问题。
递归两个条件 基线条件:
问题可以被分解为最小问题,当满足基线条件,递归不再执行,转而解决问题。
递归条件:
可以将问题继续分解的条件。
def fn(n): # 定义的fn()就是要做计算n的阶乘 # 基线条件 if n == 1: return 1 # 递归条件,n * fn(n-1)是函数关系式 return n * fn(n-1)
判断回文字符串def fn2(str1): # fn2()判断字符串是不是回文字符串 # 基线条件 if len(str1) < 2: return True elif str1[0] != str1[-1]: return False # 递归条件 return fn2(str1[1:-1])r = fn2('abcdefghrhgfedcba')print(r) # True
洛谷 P1427 小鱼的数字游戏题目地址、
import osimport syslist = input()num = [int(n) for n in list.split()]def Reverse(strings):# 基线条件 if len(strings)==2: return str(strings[0]) # 递归条件 else: # str(strings[-2])每次取Reverse(strings[:-1])的值 return str(strings[-2])+ ' ' +str(Reverse(strings[:-1]))print(Reverse(num))
球路程一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
def heigthM(num, heigth, sum): sum += heigth heigth /= 2 #第一次返回高度50 print(heigth, sum) # 查看每次返回的高度和经过多少米 if num == 1: return heigth ,sum else: sum += heigth # 返回到最高点时,经过多少米需要加上高度 return heigthM(num - 1, heigth, sum)print(heigthM(10, 100, 0)) #num是次数,heigth是高度,sum是经过多少米
猴吃桃 猴子吃桃问题:猴子第一天摘下若干个桃子,
当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,
又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
def monkey(n): if n == 1: return 1 else: return (monkey(n - 1) + 1) * 2print(monkey(10))
字符串反转def rvs(s): if s == '': return s else: return rvs(s[1:])+s[0] s= 'abcdefg'b=rvs(s)print(b) 输出:gfedcba