icode比賽已經開放到140關,快接近初賽的尾聲了,出現了較難的遞迴的關卡。
level 6
# 將遞迴函式中的額外行動補充完整
def recur(n):
# Base case
if n
return
# fill in the actions
Dev。step(2)
Dev。turnRight()
Dev。step(2)
Dev。turnLeft()
# recursion
recur(n-1)
recur(8)
本關卡中是用遞迴函式實現了迴圈的功能,完成 了8次迴圈,與下面的迴圈程式碼是相同的效果。
for i in range(8):
Dev。step(2)
Dev。turnRight()
Dev。step(2)
Dev。turnLeft()
level 7
# 在遞迴函式中,如果遞迴呼叫部分處於遞迴函式的末尾,就叫做尾遞迴。
# 每個迴圈都可以用尾遞迴來表示,相應的,每個尾遞迴都可以用迴圈來表示。
def recur(n):
# Base case
if n
return
# actions
Flyer[n]。step(1)
recur(n-1)
# recursion
recur(6)
Dev。step(8)
尾遞迴的使用,可以用迴圈來完成。
level 8
# 相信你已經掌握了遞迴的使用方法,補全下面的程式碼,完成任務吧!
def recur(n):
# Complete the code
if n
return
Flyer[n]。step(7-n)
recur(n-1)
recur(6)
Dev。step(14)
與上一關類似的操作,加入了飛板,並且飛板的步數也發生變化。
LEVEL 9
# 相信你已經掌握了遞迴的使用方法,補全下面的程式碼,完成任務吧!
def recur(n):
# Base case
if n
return
# Finish the actions
Flyer。step(2)
Dev。turnRight()
Dev。step(2)
Dev。step(-2)
Dev。turnLeft()
Dev。step(2)
# recursion
recur(n - 1)
recur(6)
迴圈用遞迴來表達
LEVEL 10
# 這是一個全新的遞迴挑戰!請記住,在開始遞迴之前,Dev可以先轉向哦!
def recur(n):
if n
return
Spaceship。step(2)
Dev。step(n)
Dev。step(-n*2)
Dev。step(n)
recur(n-2)
Dev。turnRight()
recur(8)
此關卡也是尾遞迴