1.請問第一次印完函數最後一行print(arr[n],end=" ")會繞回哪裡? 為何不會直接結束?
2.請問是因為arr[index]的index若超出範圍,才結束嗎? 為何不會出現錯誤訊息?
def f(arr):
global n
m = len(arr)
print(arr[n],end=" ")
if (n < m-1):
n = n+1
f(arr)
else:
return
# print('hello')
n = n -1 #第一次到此處是n = 3
print(arr[n],end=" ") # 第一次在這印出arr[2],下一步要回去哪裡??? 為何不是從這就結束?
n = 0
arr = ["a","b","c","d"]
f(arr)
呼叫函式(function)都是「一組」call/return
修改程式以顯示程式執行流程如下
另外
這程式比較常用「遞迴」而非「堆疊」來形容
海綿寶寶
謝謝您的解惑,不過有個地方沒弄懂。return下面那幾行,為何還跑了3次呢?為何是到了n=0才結束而不是n=2就結束?
def f(arr):
global n
m = len(arr)
print(arr[n],end=" ")
if (n < m-1):
n = n+1
f(arr)
else:
return
n = n -1
print(arr[n],end=" ")
#為何當跑到n=3跳出if/else後,來到這裡印出arr[2]沒有直接結束呢???
n = 0
arr = ["a","b","c","d"]
f(arr)
呼叫函式(function)都是「一組」call/return
此程式 call 了四次
所以也有四次 return
不過只有一次是 else 裡的 return
其他三次都是 function 最後的 return
用 return-1 和 return-2 來區分
謝謝您
這是一個遞迴的函數,google查recursive應該很多,我下方會多一些註解你再看看
def f(arr):
global n
m = len(arr)
#第一次進來時,arr=["a","b","c","d"],m=4
if (n < m): #第一次n=0 m=4, 所以0<4會進入這邊
#當n=4時,因為不會進到裡面,所以不會超過arr的index範圍
print(arr[n],end=" ")
n = n+1
f(arr) #第二次呼叫n=1 arr = ["a","b","c","d"]
#第三次呼叫n=2 arr = ["a","b","c","d"]
#第四次呼叫n=3 arr = ["a","b","c","d"]
else:
return #當n=4時就會出去此函數就結束
n = 0
arr = ["a","b","c","d"]
f(arr) #第一次呼叫n=0 arr = ["a","b","c","d"]
其實你可畫個圖出來應該會很清楚流程,你執行到底下n=3-1後print(arr[2])。該fun結束,從上一層的f(arr)後繼續執行n=n-1,變成n=2-1後print(arr[1]),直到最一開始的n=0那層。
所以思路是,第一層n=0 第二層n=1 第三層n=2 第四層n=3,第四層 return --> print(n=3-1) --> print(n=2-1) --> print(n=1-1)