16.2-递归习题
2019-09-18 本文已影响0人
BeautifulSoulpy
认知,几乎是人与人之间唯一的本质差别,是不可量化的!
递归总结:
1.递归要有边界条件、递归前进段、递归返回段;
2.递归一定要有边界条件;
3.当边界条件不满足的时候,递归前进;
4.当边界条件满足的时候,递归返回;
递归函数体格式:
两个变量a,b,+ 边界条件是什么; +计算条件 ;+ return 下级带默认参数的函数体
一个变量a增加,一个变量b减少; 计算关系是什么;
多变量递归函数格式
def 函数名fac(n,target=1): (是带默认参数的函数体*;)
…… if n == 1:
………… return target # 边界条件为 默认参数
……target = targetn #计算条件;
……return fac(n-1,target) # return 带默认参数的下级函数体;
练习1: 求 N 的阶乘;
方法1: 一个参数递归;
def fn(n):
if n == 0:
return 1
else:
return n*fn(n-1)
fn(6)
-------------------------------
720
方法2:多个参数递归;
递归函数一定要有 边界条件 或者 退出条件;
# 范例:
def fac(n,target=1): # 带默认值的函数体
if n == 1:
return target # 边界条件为 默认参数;
target = target*n #计算条件;
return fac(n-1,target) # return 带默认参数的下级函数体;
fac(4)
----------------------
24
练习2:将一个数,逆序列放入列表中, 例如1234 => [4,3,2,1]
# 练习2:讲一个数逆序列放入列表中, 例如1234 => [4,3,2,1]
写法1:
data = str(1234)
def revert(x,target=[]):
if x:
target.append(x[-1])
revert(x[:-1])
return target
revert(data)
-------------------------------
['4', '3', '2', '1']
写法2
# 使用数字 整除取模递归;
def revert(x,target= None):
if target is None:
target = []
x,y = divmod(x,10)
target.append(y)
if x == 0:
return target
return revert(x,target)
print(revert(123045))
----------------------------------------------
[5, 4, 0, 3, 2, 1]
写法3
data = str(1234)
def revert(x):
if x== -1:
return []
return [data[x]] + revert(x-1)
print(revert(len(data)-1))
-----------------------------------
['4', '3', '2', '1']
总结:
1.x,y=divmod(x,10) x=1234除10,x=123,y=10
练习3:猴子吃桃子问题:第10天早上想吃,只有一个桃子;
写法1:单参数基本写法
def nums(n):
if n == 1:
return 1
else:
return (nums(n-1) + 1)*2
nums(10)