Python递归函数介绍

一、递归的定义 

 1.什么是递归:在一个函数里在调用这个函数本身

 2.最大递归层数做了一个限制:997,但是也可以自己限制

# 验证 997
def foo(n):
    print(n)
    n+=1
    foo(n)
foo(1)

3.最大层数限制是python默认的,可以做修改,但是不建议你修改。(因为如果用997层递归都没有解决的问题要么是不适合使用递归来解决问题,要么就是你的代码太烂了)

import sys
sys.setrecursionlimit(10000000)#修改递归层数
n=0
def f():
    global n
    n+=1
    print(n)
    f()
f()

我们可以通过以上代码,导入sys模块的方式来修改递归的最大深度。

 sys模块:所有和python相关的设置和方法

 4.结束递归的标志:return 

 5.递归解决的问题就是通过参数,来控制每一次调用缩小计算的规模

 6.使用场景:数据的规模在减少,但是解决问题的思路没有改变 

 7.很多排序算法会用到递归

二、递归小应用

1.下面我们来猜一下小明的年龄 

 小明是新来的同学,丽丽问他多少岁了。

 他说:我不告诉你,但是我比滔滔大两岁。 

 滔滔说:我也不告诉你,我比晓晓大两岁 

 晓晓说:我也不告诉你,我比小星大两岁 

 小星也没有告诉他说:我比小华大两岁 

 最后小华说,我告诉你,我今年18岁了

这个怎么办呢?当然,有人会说,这个很简单啊,知道小华的,就会知道小星的,知道小星的就会知道晓晓的,以此类推,就会知道小明的年龄啦。这个过程已经非常接近递归的思想了。那么代码该怎么写呢?

def age(n):
    if n == 1:
        return 18 else: return age(n - 1) + 2 ret=age(6) print(ret)

2.一个数,除2直到不能整除2

def  cal(num):
        if  num%2==0:#先判断能不能整除
            num=num//2
            return cal(num)
        else:
            return num
print(cal(9))

3.如果一个数可以整除2,就整除,不能整除就*3+1

def func(num):
    print(num)
    if num==1:
        return
    if num%2==0: num=num//2 else: num=num*3+1 func(num) func(9)

后面还有三级菜单、多级菜单以及二分查找算法等等之类的欢迎大神补充学习。

猜你喜欢

转载自www.cnblogs.com/caijunchao/p/9575153.html