Python函数递归

                                              Python函数递归

1、什么是函数递归?

    函数递归调用:在调用一个函数的过程中直接或间接地调用该函数本身,称之为函数的递归调用

2、利用递归求和

    ①求1到998的总和:

def sum(n):
    if n==1:
        return 1
    else:
        return n+sum(n-1)
print(sum(998))

   返回结果:

498501

   如果将print(sum(998))改成print(sum(999))结果如下:

Traceback (most recent call last):
  File "D:/Code/python练习/python函数/1、递归.py", line 7, in <module>
    print(sum(999))
  File "D:/Code/python练习/python函数/1、递归.py", line 6, in sum
    return n+sum(n-1)
  File "D:/Code/python练习/python函数/1、递归.py", line 6, in sum
    return n+sum(n-1)
  File "D:/Code/python练习/python函数/1、递归.py", line 6, in sum
    return n+sum(n-1)
  [Previous line repeated 994 more times]
  File "D:/Code/python练习/python函数/1、递归.py", line 3, in sum
    if n==1:
RecursionError: maximum recursion depth exceeded in comparison

    注:实际上python对递归做了层级限制的,不会进入死循环,避免内存溢出。

   ②修改并且查看递归的次数限制:

import sys
print(sys.getrecursionlimit())
sys.setrecursionlimit(2000)
print(sys.getrecursionlimit())

   返回结果:

1000
2000

   ③递归求斐波那契数列(自上而下,代码容易理解,但实际上重复了很多步骤,特别慢,后面的数甚至就求不出来):

import time
def fib(n):
    # 判断是否为整数
    if isinstance(n,int):
        if n == 1 or n == 2:
            return 1
        else:
           return fib(n-1)+fib(n-2)
    else:
        return 0
# 开始计时
startTime=time.perf_counter()
print(fib(33))
# 结束计时
endTime=time.perf_counter()
# 打印运行时间
print(endTime-startTime,"秒")

     返回值:

3524578
1.8636762787061125 秒

     ④递归求斐波那契数列(自下而上,代码容易理解,减少重复了步骤,速度快):

import time
# 通过一个列表记录数列的值,减少递归的次数
def fib(n,k=1,sum=[]):
    # 判断n是否为整数
    if isinstance(n,int):
        if k>n:
            return sum[n-1]
        elif k==1 or k==2:
           sum.append(1)
           return fib(n,k+1,sum)
        else:
            sum.append(sum[k-3]+sum[k-2])
            return fib(n, k + 1, sum)
    else:
        return 0
# 计时开始
startTime=time.perf_counter()
print(fib(33))
# 计时结束
endTime=time.perf_counter()
# 打印运行时间
print(endTime-startTime,"秒")

   返回结果:

3524578
4.777210590383001e-05 秒

总结:迭代者为人,递归者为神

猜你喜欢

转载自blog.csdn.net/weixin_41859405/article/details/81230336
今日推荐