Python 如何编写递归函数来查找阶乘

Python 如何编写递归函数来查找阶乘

一个数字的阶乘是从1到该数字的所有正整数的乘积。例如,4的阶乘是432*1 = 24。

为了使用递归的Python函数来查找一个数字的阶乘,我们可以定义一个函数,它以较小的输入调用自身,直到达到基本情况,即阶乘为1。

下面是使用递归的Python函数来查找一个数字的阶乘的代码−

def factorial(n):
   if n == 1:
      return 1
   else:
      return n * factorial(n-1)

在这段代码中,函数 factorial(n) 接收一个数字 n 作为输入,并返回该数字的阶乘。第一个 if 语句检查输入的数字 n 是否为 1。如果 n 为 1,函数返回 1 作为基本情况。如果 n 不为 1,函数返回 n 乘以 n-1 的阶乘。这是递归函数调用发生的地方,其中函数以输入 n-1 调用自身。

要使用此函数,您可以简单地使用要找到其阶乘的数字调用它,例如 −

示例

找到 8 的阶乘

def factorial(n):
   if n == 1:
      return 1
   else:
      return n * factorial(n-1)
print(factorial(8))

输出

40320

示例

下面的代码计算n=6和n=15的阶乘

def factorial(n):
   if n == 1:
      return 1
   else:
      res = n * factorial(n-1)
   return res
print ("factorial(6) = %d" %factorial(6))
print ("factorial(15) = %d" %factorial(15))

输出

factorial(6) = 720
factorial(15) = 1307674368000

这是代码实例的示例 –

示例

def factorial(n):
   if n==0 or n == 1:
      return 1
   else:
      return n * factorial(n-1)
print(factorial(5))

输出

120

为了理解该函数的工作原理,让我们看看它如何计算5的阶乘:

函数使用输入5进行调用。

由于5不等于1,执行else块。

函数返回5 * factorial(4)。

为了计算4的阶乘,再次调用函数并输入4。

由于4不等于1,执行else块。

函数返回4 * factorial(3)。

为了计算3的阶乘,再次调用函数并输入3。

由于3不等于1,执行else块。

函数返回3 * factorial(2)。

为了计算2的阶乘,再次调用函数并输入2。

由于2不等于1,执行else块。

函数返回2 * factorial(1)。

为了计算1的阶乘,再次调用函数并输入1。

由于1等于1,执行if块。

函数返回1作为基本情况。

前面的函数调用不断解析。

2 * factorial(1) is resolved to 2 * 1 = 2.
3 * factorial(2) is resolved to 3 * 2 = 6.
4 * factorial(3) is resolved to 4 * 6 = 24.
5 * factorial(4) is resolved to 5 * 24 = 120.

最终结果为 120。

此过程显示了函数如何使用递归以较小的输入重复调用自身,直到达到基本情况为 1,然后通过将其乘以下一个较小输入的阶乘来返回每个输入的阶乘。

使用递归函数找到不同数字的阶乘的一些更多示例如下所示 −

示例

找到 7 的阶乘

def factorial(n):
   if n == 1:
      return 1
   else:
      return n * factorial(n-1)
print(factorial(7))

输出

5040

示例

找到10的阶乘

def factorial(n):
   if n == 1:
      return 1
   else:
      return n * factorial(n-1)
print(factorial(10))

输出

3628800

示例

找到1的阶乘

def factorial(n):
   if n == 1:
      return 1
   else:
      return n * factorial(n-1)
print(factorial(1))

输出

1

示例

计算0的阶乘(注意,0的阶乘定义为1)

def factorial(n):
   if n == 1 or n == 0:
      return 1
   else:
      return n * factorial(n-1)
print(factorial(0))

输出

1

这些例子展示了如何使用该函数来计算不同数字的阶乘,包括0和1的边界情况。

这里还有一个例子,用来说明该函数如何处理大输入值 –

示例

计算20的阶乘

def factorial(n):
   if n == 1:
      return 1
   else:
      return n * factorial(n-1)
print(factorial(20))

输出

2432902008176640000

这个例子表明该函数可以处理大量的输入,而不会遇到错误或性能问题。然而,值得注意的是,对于非常大的输入,递归函数可能会遇到堆栈溢出的问题,或者执行时间非常长,因此在这些情况下,最好使用迭代实现阶乘函数。

下面是Python中阶乘函数的迭代实现的例子 −

def factorial(n):
   result = 1
   for i in range(1, n+1):
      result *= i
   return result

在此实现中,函数遍历从1到n的所有数字,将它们相乘以计算阶乘。结果存储在变量result中,该变量初始化为1。

要使用此函数,您可以使用要计算阶乘的数字调用它,如下所示 –

示例

def factorial(n):
   result = 1
   for i in range(1, n+1):
      result *= i
   return result
print(factorial(9))

输出

362880

这个迭代实现在处理非常大的输入时比递归实现有一些优势。首先,它没有遇到堆栈溢出问题,因为它不使用函数调用来计算阶乘。其次,它通常比递归实现更快,因为没有函数调用和堆栈操作的开销。然而,对于较小的输入,递归实现可能更简洁和易于理解。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程