Python—递归

递归在编程中使用起来还是很方便的 
python3中默认的递归层数是100,当然我们也是可以修改的

>>> import  sys
>>> sys.setrecursionlimit(100)
>>> 

用普通的函数迭代求阶乘:

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

        return result
number = int(input('请输入一个正整数:'))
result = factorial(number)
print("%d 的阶乘是:%d" %(number,result))

 用递归求阶乘:

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

number = int(input('请输入一个正整数:'))
result = factorial(number)
print("%d 的阶乘是:%d" %(number,result))

斐波那契数列
下面用迭代的方式实现以下:

def fab(n):
      n1 = 1
      n2 = 1
      n3 = 1
      if n < 1:
            print('输入有误')
            return -1
      while (n - 2) > 0:
            n3 = n2 + n1
            n1 = n2
            n2 = n3
            n -=1

      return n3
result = fab(20)
if result != -1:
      print('共有%d对小兔子诞生!' %result)

然后用递归实现以下:

def fab(n):
      if n < 1:
            print('输入有误')
            return -1
      if n == 1 or n == 2:
            return 1
      else:
            return fab(n-1) + fab(n-2)
result = fab(20)
if result != -1:
      print('共有%d对小兔子诞生!' %result)

当数值较小的时候递归和迭代的速度可以说是相当的,但是当结果较大时递归运算是比较慢的,迭代的速度要比递归快得多。
递归汉诺塔

def hanoi(n,x,y,z):
      if n == 1:
            print(x,'-->',z)
      else:
            hanoi(n-1,x,z,y) #将前n-1个盘子从x移动到y
            print(x,'-->',z) #将最后一个盘子从x移动到z
            hanoi(n-1,y,x,z) #将y上的n-1个盘子移动到z

n = int(input('请输入汉诺塔的层数:'))
hanoi(n,'X','Y','Z')

猜你喜欢

转载自blog.csdn.net/weixin_42994525/article/details/86627809
今日推荐