1. 程式人生 > >python學習遞迴

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\n')
  if n>=2:
    print('2 --> 1\n')
  if n>=3:
    for i in range(1, n-1):
      c = a + b
      print('%d --> %d\n'%(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')