[009]Python的函数_递归函数_全栈基础

您好!此笔记的文本和代码以网盘形式分享于文末!

因个人能力有限,错误处欢迎大家交流和指正!基础部分内容简单,但多且零散!

python递归函数
人理解循环,神理解递归,BUT龟叔拒绝py加入尾递归优化
递归的定义——在一个函数内部再调用这个函数本身,py强制的将递归层数控制在了998
递归函数的优点是定义简单,逻辑清晰,理论上所有的递归函数都可以写成循环的方式,
                 但循环的逻辑不如递归清晰
函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出,
尾递归:python 不支持尾递归
 尾递归优化:尾递归优化是解决递归调用栈溢出的方法,事实上尾递归和循环的效果是一样的,
所以,把循环看成是一种特殊的尾递归函数也是可以的
用法栗子结果
递归函数默认深度
998
def foo(n):
    print(n)
    n += 1
    foo(n)


foo(0)
993
994
995
996
997Traceback (most recent call last):
改变递归函数默认深度
测试发现不十分准确
不建议修改使用
import sys
sys.setrecursionlimit(2000)


def foo(n):
    print(n)
    n += 1
    foo(n)


foo(0)
1994
1995
1996
1997Traceback (most recent call last):
详解递归函数
递归实例
def example(n):
    print(n)
    if n > 0:
        example(n - 1)
    else:
        print('*******')
    print(n)


example(3)
3
2
1
0
*******
0
1
2
3
详解递归函数
实例解析
example(3): 
    print(3)3
    if 3 > 0: 
        example(2): 
            print(2)2
            if 2 > 0: 
                example(1): 
                    print(1)1
                    if 1 > 0: 
                        example(0): 
                            print(0)0
                            else: 
                                print('*******')*******
                            print(0)0
                    print(1)1
            print(2)2
    print(3)3
 
递归和循环
循环for
def sum_cycle1(n):
    sum1 = 0
    for i in range(1, n+1):
        sum1 += i
    return sum1

print('循环for求和:', sum_cycle1(100))
循环for求和: 5050
递归和循环
循环while
def sum_cycle2(n):
    sum1 = 0
    while n > 0:
        sum1 += n
        n -= 1
    return sum1

print('循环while求和:', sum_cycle2(100))
循环while求和: 5050
递归和循环
递归
def sum_recu(n):
    if n > 0:
        return n + sum_recu(n-1)  # 调用函数自身
    else:
        return 0

print('递归求和:', sum_recu(100))
递归求和: 5050
递归函数和三级菜单  
递归和二分法  
递归与斐波那契数列
普通递归实现
def fib(n):
  if n < 2:
    return n
  else:
    return fib(n - 1) + fib(n - 2)
 
递归与斐波那契数列
尾递归实现
def fib_tail(n, r, t):
  if n == 1:
    return r
  else:
    return fib_tail(n - 1, t, r + t)
 
尾递归优化 

愿有更多的朋友,在网页笔记结构上分享更逻辑和易读的形式:

链接:暂无
提取码:暂无

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值