5个Python中的递归练习和解决方案

426 阅读3分钟

在编程中,递归 是一种使用函数或算法的技术,它可以一次或多次调用自己,直到满足一个特定条件。

递归函数是一个在失败条件下调用自身的函数。这意味着在该函数定义本身中会有一个或多个函数调用。

让我们看看如何用 Python 实现递归。在这篇文章中,我提供了几个在 Python 中使用递归的例子。看看这些例子,我希望它们能帮助你对编程中的递归概念有一个清晰的概念。让我们直接进入。

例1:寻找一个数字的阶乘

如果你熟悉数学中的阶乘概念,这将是一个很好的例子,你可以从这里开始。在数学中,求一个数的阶乘的公式如下。

n! = n * (n-1)!

下面是一个Python程序,它通过递归地调用一个函数来求出一个数的阶乘。

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


num = int(input("Enter a number: "))

if num<0:
  print("Negative numbers are not allowed.")
elif num==0:
  print("Factorial is: 1")
else:
  print("Factorial is: ",fact(num))

例2:斐波那契数列

斐波那契数列是数学中的一种特殊数列,其中当前项是前两项的总和。例如,一个斐波那契数列看起来像这样。

0, 1, 1, 2, 3, 5, 8, 13,…

在这个数列中,下一个数字是由之前的两个数字相加而得到的。

下面是一段Python代码,它可以找出直到一个数字n的斐波那契数列。

def fib(n):
  if n<=1:
    return n
  else:
    return fib(n-1) + fib(n-2)

count = int(input("Enter the limit: "))

if count<=0:
  print("Enter a number greater than 0")
else:
  for i in range(count):
    print(fib(i),end=" ")

例3:求一个数的幂

找出一个数字的幂的数学公式如下。

p(base, exp) = base * p(b, exp-1) 

例如,23= p(2, 3) = 2 * p(2,2)

下面是求一个数的幂的Python代码。

def power(base,exp):
  if exp==1:
    return base
  else:
    return base*(power(base,exp-1))

b = int(input("Enter the base value: "))
e = int(input("Enter the exponent value: "))
print("The result is:", power(b,e))

例四:组合

你可能听说过数学中的排列和组合。在这个例子中,让我们看看如何使用 Python 递归函数找出组合。

这里是寻找组合的方程式。

n

这里,n是项目的总数,r是需要的组合数。

例如,考虑从A、B、C、D中取2个值的组合。

4C2= 4!/ 2!(4-2)!= 24/2(2) = 24/4 = 6

下面给出了实现组合的Python代码。

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

def combination(n,r):
  return fact(n)/(fact(r)*fact(n-r))

n = int(input("Enter n: "))
r = int(input("Enter r: "))
print(int(combination(n,r)))

例5:河内塔

河内之塔是一个数学问题,我们有三根棒子和n个盘子。这个问题的目标是在遵守以下规则的情况下,将所有的盘子移到另一根杆子上。

  • 一次只能移动一个盘
  • 你不能把大盘放在小盘上。
  • 磁盘在开始时按其大小升序排列。

通用算法(考虑A为起始塔,B为结束塔,C为辅助塔)。

  • 使用B将n-1个磁盘从A移到C
  • 从A移动1个盘到B
  • 用A将N-1个盘从C移到B

下面是解决河内塔问题的Python代码。

def toh(n,start,end,aux):
  if(n==1):
    print("Move disk 1 from",start,"to",end)
    return
  toh(n-1,start,aux,end)
  print("Move disk",n,"from",start,"to",end)
  toh(n-1,aux,end,start)

n = int(input("Enter the number of disks: "))
toh(n,'A','B','C')