我使用迭代和递归方法来实现阶乘,但是当为大数找到相同的阶乘时,需要花费大量的时间。有什么方法可以改变这一点吗?
# 回答1
我明白你的问题,计算阶乘的问题有一个高度重复的结构。您可以使用动态编程来解决您的问题。实现动态规划的条件是
重叠子问题
最优子结构
这里有一个代码,它可能会帮助你理解我想说的话
- def DPfact(N):
- arr={}
- if N in arr:
- return arr[N]
- elif N == 0 or N == 1:
- return 1
- arr[N] = 1
- else:
- factorial = N*DPfact(N - 1)
- arr[N] = factorial
- return factorial
-
- num=int(input("Enter the number: "))
-
- print("factorial of ",num," (dynamic): ",end="")
- print(DPfact(num))
为了更清楚地了解阶乘从基础到如此高级的水平,
# 回答3
用C实现的数学模块阶乘比递归调用更快。
- import math
- num=int(input("Enter the number: "))
- print(math.factorial(num))
# 回答4
这里是内置的阶乘算法,如果有人感兴趣的话
Https://hg.python.org/cpython/file/7...module.c#l1218