MIT公開課:電腦科學及編程導論 Python 筆記4 函數分解抽象與遞迴

來源:互聯網
上載者:User

標籤:python   遞迴   雞兔同籠   迴文   fibonacci   

Lecture4:Decomposition and abstraction through functions;introduction to recursion 函數分解抽象與遞迴

Functions 函數

  • block up into modules 分解為模組
  • suppress detail 忽略細節
  • create “new primitives” 建立原語的思考方式
    w3school Python函數
#example code for finding square roots beforex = 16ans = 0if x >= 0:    while ans*ans < x:        ans = ans + 1        print ‘ans =‘, ans    if ans*ans != x:        print x, ‘is not a perfect square‘    else: print anselse:  print x, ‘is a negative number‘
  • def 關鍵字
  • function_name (formal parameters) 函數名(形參)
  • return 關鍵字
  • None -special value
#example code for finding square rootsdef sqrt(x):  """Returns the square root of x, if x is a perfect square.       Prints an error message and returns None otherwise"""  ans = 0  if x >= 0:      while ans*ans < x: ans = ans + 1      if ans*ans != x:          print x, ‘is not a perfect square‘          return None      else: return ans  else:        print x, ‘is a negative number‘        return None

local binding do not affect global binding:
本地綁定(局部變數)不會影響 全域綁定(變數):

def f(x): x=x+1return x>>>x=3>>>z = f(x) >>>print x3 >>>print z4

Farmyard problem 農場問題:

  • 20 heads, 56 legs
  • numPig + numChicken = 20 豬的數量+雞的數量 = 20
  • 4 *numPig + 2*numChicken = 56
def solve(numLegs, numHeads):    for numChicks in range(0, numHeads + 1):        numPigs = numHeads - numChicks        totLegs = 4*numPigs + 2*numChicks        if totLegs == numLegs:            return (numPigs, numChicks)    return (None, None)def barnYard():    heads = int(raw_input(‘Enter number of heads: ‘))    legs = int(raw_input(‘Enter number of legs: ‘))    pigs, chickens = solve(legs, heads)    if pigs == None:        print ‘There is no solution‘    else:        print ‘Number of pigs:‘, pigs        print ‘Number of chickens:‘, chickens

農場主又養了蜘蛛:

def solve1(numLegs, numHeads):    for numSpiders in range(0, numHeads + 1):        for numChicks in range(0, numHeads - numSpiders + 1):            numPigs = numHeads - numChicks - numSpiders            totLegs = 4*numPigs + 2*numChicks + 8*numSpiders            if totLegs == numLegs:                return (numPigs, numChicks, numSpiders)    return (None, None, None)def barnYard1():    heads = int(raw_input(‘Enter number of heads: ‘))    legs = int(raw_input(‘Enter number of legs: ‘))    pigs, chickens, spiders = solve1(legs, heads)    if pigs == None:        print ‘There is no solution‘    else:        print ‘Number of pigs:‘, pigs        print ‘Number of chickens:‘, chickens        print ‘Number of spiders:‘, spiders

改進:輸出所有的解決方案:

def solve2(numLegs, numHeads):    solutionFound = False    for numSpiders in range(0, numHeads + 1):        for numChicks in range(0, numHeads - numSpiders + 1):            numPigs = numHeads - numChicks - numSpiders            totLegs = 4*numPigs + 2*numChicks + 8*numSpiders            if totLegs == numLegs:                print ‘Number of pigs: ‘ + str(numPigs) + ‘,‘,                print ‘Number of chickens: ‘+str(numChicks)+‘,‘,                print ‘Number of spiders:‘, numSpiders                solutionFound = True    if not solutionFound: print ‘There is no solution.‘

recursion 遞迴

  • base case – break problem into simplest possible solution把問題分解成最簡單的解決方案
  • inductive step, or the recursive step 歸納、遞迴步驟: break problem into a simpler version of the same problem and some other steps
# 字串是否是迴文 eg. "abcba"def isPalindrome(s):    """Returns True if s is a palindrome and False otherwise"""    if len(s) <= 1: return True    else: return s[0] == s[-1] and isPalindrome(s[1:-1])
# 付波納切fibonacci數列def fib(x):    """Return fibonacci of x, where x is a non-negative int"""    if x == 0 or x == 1: return 1    else: return fib(x-1) + fib(x-2)

MIT公開課:電腦科學及編程導論 Python 筆記4 函數分解抽象與遞迴

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.