伊莉討論區
標題:
python 練習問題(遞迴)
[打印本頁]
作者:
54041817
時間:
2018-8-31 11:30 AM
標題:
python 練習問題(遞迴)
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
codewice
時間:
2018-9-1 06:40 PM
看起來像是上面少一個 return
>>> def a(s, j):
... if (j != s):
... j+=1
... return a(s, j)
... else:
... print(j)
... return j
...
>>> print(a(100,0))
100
100
>>>
複製代碼
作者:
johnwanz
時間:
2018-9-3 09:07 AM
從邏輯上來說, 這個遞迴程序只有最後一次, j==s的時候, 才有回傳一次;
正常走 j!=s , 在第一次的判斷中, a(s,j)執行之後, 是沒有回傳的.
作者:
54041817
時間:
2018-9-3 11:02 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
54041817
時間:
2018-9-3 11:09 PM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
johnwanz
時間:
2018-9-4 09:08 AM
本帖最後由 johnwanz 於 2018-9-4 09:11 AM 編輯
54041817 發表於 2018-9-3 11:09 PM
我想的就是 只要j==s才回傳 我不懂為什麼在呼叫自己函數也要回傳
遞迴是反覆地呼叫自己, 可是你只有在不呼叫自己的時候, 才有回傳.
也就是, 一直呼叫自己(j!=s), 到最後一次的時候, 因為不再呼叫自己(else)才有回傳.
而倒數第二層, 因為走的是呼叫自己的流程(else), 而這一段敘述並沒有回傳指令;
自此開始, 從倒數第二層往上, 通通都是走(j!=s)的路徑結束, 通通不具備回傳指令.
所以, 推導至首次呼叫函式, 執行完成的路徑, 走的是(j!=s), 呼叫a(s,j)路徑, 因為該段落沒有回傳, 所以自然是nothing.
作者:
tryit244178
時間:
2018-11-4 04:25 PM
本帖最後由 tryit244178 於 2018-11-4 04:27 PM 編輯
反過來寫,看會不會比較好理解。基本上和樓上大大的說明是類似的
def a(s, j)
if(s==j):
return j
return a(s, j+1)
複製代碼
作者:
mountainboy
時間:
2018-11-18 12:31 AM
提示:
作者被禁止或刪除 內容自動屏蔽
作者:
zxcv3316822
時間:
2019-2-2 10:44 PM
如果還是不懂得話,去看看區域變數與全域變數之間的差別吧。
作者:
3iljw
時間:
2019-3-20 03:27 PM
簡單來說就是你最後一次j=100時,才會return j(a(100,100)在else裡面),
但下面裡呼叫的是a(100,0)(在A的if裡面)
所以不會有值傳出來,
而且建議你要寫main喔,這樣程式才能有一個進入的切入點
歡迎光臨 伊莉討論區 (http://a401.file-static.com/)
Powered by Discuz!