python学习递归

递归  函数调用自身,且有终止条件

  python默认递归层数为100

可以修改层数  

  import sys

  sys.setrecursionlimit(1000)

递归求阶乘

------------1迭代

  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))

-------------2递归

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))

递归有危险性,因为有栈操作,消耗内存,所以一定要传出去,归回值

斐波那契数列

F(n)=F(n-1)+F(n-2)  F(1)=1  F(2)=1

----------1迭代

def factorial(n):
  a = 1
  b = 1
  if n>=1:
    print('1 --> 1 ')
  if n>=2:
    print('2 --> 1 ')
  if n>=3:
    for i in range(1, n-1):
      c = a + b
      print('%d --> %d '%(i+2, c))
      a = b
      b = c
      return c
  else:
    return 1
number = int(input('输入一个数:'))
result = factorial(number)
print('%d 的斐波那契数是 %d'%(number, result))

--------------2递归

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)
number = int(input('输入一个数:'))
result = fab(number)
if result != -1:
  print('%d 的斐波那契数是 %d'%(number, result))

递归很好写,但很费内存,比如35以上就需要一段时间才能计算出来

汉诺塔游戏算法

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')

原文地址:https://www.cnblogs.com/jdzhang1995/p/10246554.html