[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)
 
尾递归优化  

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

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

链接:暂无
提取码:暂无