递归

  • 定义

  简单地说一个函数不断的调用自己就是递归

  1. 必须有一个明确的结束条件也叫递归出口
  2. 每次进入更深一层的递归时,问题规模相比上一次递归都应有所减少
  3. 递归效率不高,递归的层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,当本次函数调用完会将结果保存在栈中,称为压栈,然后在执行下一次,栈的特点是先进后出,由于栈的大小不是无限的,所以,递归调用的次数过多会导致栈溢出

def info(x):
    if x == 0:
        return 0

    s = info(x - 1) + x
    print(x)  # 递归在入栈是3 2 1入栈出栈的时候就应该是1 2 3
    return s


print(info(3))

'''
小猴子第一天摘下若干桃子,当即吃掉一半,又多吃一个.第二天早上又将剩下的桃子吃一半,
又多吃一个.以后每天早上吃前一天剩下的一半另一个.到第10天早上猴子想再吃时发现,
只剩下一个桃子了.问第一天猴子共摘多少个桃子?
'''
i = 1
b = 1
while i < 10:
    c = (b + 1) * 2
    b = c
    i += 1
print(c)


# 在这里
# 递归求解
def info(n):
    if n == 10:
        return 1
    s = (info(n + 1) + 1) * 2
    return s
n1 = info(1)
sums = (n1 + 1) * 2
print("总共有桃%d" % sums)

for i in range(1, 11):
    print("第%d天吃了%d" % (i, info(i)))
def duck(n):
    if n == 7:

        return 2

    else:

        tmp = (duck(n + 1) + 1) * 2

        return tmp


n1 = duck(1)
init = (n1 + 1) * 2
print("总共有%d只鸡" %init)
for i in range(1,8):
    print("第 %d 天 卖了%d只" % (i, duck(i)))

 



#
问路如果这个人不知道会去问下一个,如果问到了会依次将结果返回上一级 li = ['a', 'b', 'c', 'd'] def wenlu(a): print("*"*60) if len(a) == 0: return "根本没人知道" person = a.pop(0) if person == 'd': return "这里" print("我也不知道,我问一下%s" %a) res = wenlu(a) print('%s问的结果是%s' %(person,res)) return res wenlu(li) #结果 ************************************************************ 我也不知道,我问一下['b', 'c', 'd'] ************************************************************ 我也不知道,我问一下['c', 'd'] ************************************************************ 我也不知道,我问一下['d'] ************************************************************ c问的结果是这里 b问的结果是这里 a问的结果是这里
#简单递归求阶乘
def a(k):
    if k == 0:
        sums = 1
    else:
        sums = k * a(k-1)
    return sums
print(a(9))
#递归小练习倒序输出
import time 

def output(a, b):

    if b-1 < 0:
        return
    time.sleep(2)
    print(s[b - 1])
    output(s, b-1)
s = input("输入一串字符")
l = len(s)
output(s, l)

#用切片来实现

s = input("请输入:")
print("原来的:", s)
a = s[::-1]
print("反转", a)
# 有雌雄一对兔子,假定过两个月便可繁殖雌雄各一的一对小兔子。问过n个月后共有多少对兔子?
def rabbit(n):
    if n == 1:
        return 1
    if n == 2:
        return 1
    return rabbit(n-2) * 2


print(rabbit(9))

 

posted @ 2018-07-17 21:44  ShanCe-刘勇  阅读(259)  评论(0编辑  收藏  举报