1.案例描述算法
將遞歸函數與循環函數結合繪製2.0的圖形數據結構
2.案例分析函數
3.上機實驗性能
""" 做者:梁斌 功能:五角星的繪製 版本:3.0 日期:03/08/2017 新增功能:加入循環操做繪製重複不一樣大小的圖形 新增功能:使用迭代函數繪製重複不一樣大小的圖形 """ import turtle def draw_pentagram(size): """ 繪製五角星 """ # 計數器 count = 1 while count <= 5: turtle.forward(size) turtle.right(144) # count = count + 1 count += 1 def draw_recursive_pentagram(size): """ 迭代繪製五角星 """ # 計數器 count = 1 while count <= 5: turtle.forward(size) turtle.right(144) # count = count + 1 count += 1 # 五角星繪製完成,更新參數 size += 10 if size <= 100: draw_recursive_pentagram(size) def main(): """ 主函數 """ turtle.penup() turtle.backward(200) turtle.pendown() turtle.pensize(2) turtle.pencolor('red') size = 50 draw_recursive_pentagram(size) turtle.exitonclick() if __name__ == '__main__': main()
4.遞歸函數spa
遞歸(Recursion)是指在函數的定義中使用函數自身的方法。遞歸就是有去(遞去)有回(歸來)。.net
(1)遞歸三要素:設計
明確遞歸終止條件;code
給出遞歸終止時的處理辦法;blog
提取重複的邏輯,縮小問題規模。遞歸
(2)遞歸典型算法設計模型
function recursion(大規模){ if (end_condition){ // 明確的遞歸終止條件 end; // 簡單情景 }else{ // 在將問題轉換爲子問題的每一步,解決該步中剩餘部分的問題 solve; // 遞去 recursion(小規模); // 遞到最深處後,不斷地歸來 } }
function recursion(大規模){ if (end_condition){ // 明確的遞歸終止條件 end; // 簡單情景 }else{ // 先將問題所有描述展開,再由盡頭「返回」依次解決每步中剩餘部分的問題 recursion(小規模); // 遞去 solve; // 歸來 } }
Python實例(同時包含遞去處理和歸來處理)
# 樹枝長度小於5時終止,每次樹枝長度減小15(繪製右側樹枝後,原路返回到起點)
def draw_branch(branch_length): if branch_length < 5: return else: # 繪製右側樹枝 turtle.forward(branch_length) print('向前 ', branch_length) turtle.right(20) print('右轉 20') draw_branch(branch_length - 15) # 返回以前的樹枝 turtle.left(20) print('左轉 20') turtle.backward(branch_length) print('向後 ', branch_length)
(3)遞歸與循環
(4)遞歸使用場景(第三種最多見)
5.Pycharm技巧
(1)選中多行代碼,Ctrl+l按一次註釋,按兩次取消註釋。
(2)選中多行代碼,Tab鍵縮行,Shift+Tab反向縮行。
(3)Alt + 上箭頭,代碼上移;Alt+下箭頭,代碼下移。
參考文檔: