Python递归函数求阶乘:原理、限制与自定义深度设置

栗子
栗子
发布时间:2026-10-13 | 2人浏览过
原创

本文详解Python递归函数的两大核心特点:调用自身与设置出口。通过阶乘示例展示递归实现,并指出其资源占用高的缺点。重点讲解Python默认1024次递归限制及RuntimeError报错,演示如何使用sys.setrecursionlimit自定义调用次数。最后结合菲波那奇数列图形输出,提供完整的递归函数编写与运行代码参考。

递归函数的核心特点与实现

递归函数具备两个显著特征:

第一,函数内部可以调用自身;

第二,必须包含至少一个终止条件(即递归出口),以确保调用不会无限进行。

具体实现方式如下:


def calnum(num):
  if num != 1:
    # 递归调用自身函数
    csum = num * calnum(num - 1)
  else:
    # 设置递归出口
    csum = 1

  return csum

ret = calnum(5)
print(ret)

递归函数的局限性及深度限制

递归函数的主要劣势在于:

由于频繁调用自身,会消耗较多系统资源,因此在实际开发中通常不是首选方案。

在Python程序中,默认情况下仅允许递归调用自身1024次,一旦超过此限制,

Python解释器会判定程序存在执行错误并强制停止运行。

此时出现的错误提示为:

RuntimeError: maximum recursion depth exceeded

不过,Python允许用户自定义递归调用的最大次数:


import sys
# 设置允许的调用次数为2000
sys.setrecursionlimit(2000)

菲波那奇数列递归应用示例

补充案例:使用Python编写求菲波那奇数列的递归函数,输入n值后调用该函数。

题目要求:

编写一个计算菲波那奇数列的递归函数,接收输入n值,并利用该函数输出如下图形。例如,当n等于6时。


            0
          0  1  1
        0  1  1  2  3
      0  1  1  2  3  5  8
    0  1  1  2  3  5  8 13 21
  0  1  1  2  3  5  8 13 21 34 55

图形规律分析:

1. 每一行的第一个数字均为0;

2. 第n行包含的数字个数为2n-1个;

3. 第n行第m列的数值,等于第n行中第m-1列与m-2列数值之和;

相关实现代码:


def fei(i,j): #i为行数,j为列数
  if i == 1 or j ==1:
    return 0
  elif j == 2 :
    return 1
  else:
    return fei(i,j-1) + fei(i,j-2)
 
for i in range(1,7):
  print()
  for k in range(1,7-i): #控制空格数
    print(" ",end="")
  for j in range(1,(2*i)): 
    print(fei(i,j),"",end="")

程序运行结果展示:

以上关于Python递归函数求n的阶乘、优缺点分析及递归次数设置方法的介绍到此结束,希望能为读者提供有益参考,并欢迎大家继续支持本站内容。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表