1 问题
在课上,我们学习了用递归函数去计算一个自然数n的阶乘。但计算一个自然数n的阶乘是否就这一种方法呢?
2 方法
关于计算一个自然数n的阶乘,通过搜索,我们寻找到了除运用递归函数外的其他三种方法:
方法一 通过导入math模块,然后调用facyorial()函数来计算阶乘
方法二 调用reduce()函数加if()语句实现
方法三 利用for的循环来实现
代码清单 1
# 利用递归法求一个数的阶乘 def factorial(n): assert n>=0,"请输入自然数" if n==0: return 1 return n*factorial(n-1) a = int(input('请输入一个自然数')) print(factorial(a)) # 利用facyorial()函数法求一个数的阶乘 import math a = int(input('请输入一个自然数:')) value = math.factorial(a) print(f'{a}的阶乘为{value}') # 利用reduce()函数发求一个数的阶乘 from functools import reduce def factorial(n): assert n >= 0,"请输入自然数" if n == 0: return 1 return reduce(lambda x, y: x * y, range(1,n + 1)) a = int(input('请输入一个自然数:')) print(factorial(a)) # 利用for循环的方法求一个数的阶乘 a = int(input('请输入一个自然数:')) result = 1 if a<0: print('负数没有阶乘') elif a==0: print('0的阶乘为1') else: for i in range(1,a+1): result *=i print(f'{a}的阶乘为{result}') |
3 结语
针对如何求一个自然数n的阶乘的问题,我们可以使用递归函数、导入math模块调用facyorial()函数、调用reduce()函数、for循环这四种方法来计算,通过python程序运行结果,证明该方法是有效的,这些方法能实现代码直观易懂。但递归函数过多的调用会导致栈溢出的问题,这时可以通过尾递归优化解决。未来,我们可以合理运用这四种方法更快更准确地计算出我们所需要计算的数。