Python全栈工程师

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 = target
n #计算条件;
……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)
上一篇下一篇

猜你喜欢

热点阅读