Re: [問題]一個 遞迴的 return問題
有趣的問題。 從Python bytecode來看有細微的差別。
以下是用Python2.7跑的實驗。
結果是第一個寫法多了一些東西,
但我猜很難對效能產生大影響。
===
實驗一
import dis
def f(i):
if i == 0: return
print(i)
f(i-1)
dis.dis(f)
實驗二
import dis
def f(i):
if i == 0: return
print(i)
return f(i-1)
dis.dis(f)
結果一
4 0 LOAD_FAST 0 (i)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_FALSE 16
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
5 >> 16 LOAD_FAST 0 (i)
19 PRINT_ITEM
20 PRINT_NEWLINE
6 21 LOAD_GLOBAL 0 (f)
24 LOAD_FAST 0 (i)
27 LOAD_CONST 2 (1)
30 BINARY_SUBTRACT
31 CALL_FUNCTION 1
34 POP_TOP
35 LOAD_CONST 0 (None)
38 RETURN_VALUE
結果二
4 0 LOAD_FAST 0 (i)
3 LOAD_CONST 1 (0)
6 COMPARE_OP 2 (==)
9 POP_JUMP_IF_FALSE 16
12 LOAD_CONST 0 (None)
15 RETURN_VALUE
5 >> 16 LOAD_FAST 0 (i)
19 PRINT_ITEM
20 PRINT_NEWLINE
6 21 LOAD_GLOBAL 0 (f)
24 LOAD_FAST 0 (i)
27 LOAD_CONST 2 (1)
30 BINARY_SUBTRACT
31 CALL_FUNCTION 1
34 RETURN_VALUE
※ 引述《sunnoset (skj)》之銘言:
: f(10)
: 和
: def f(i):
: if i == 0: return
: print(i)
: return f(i-1)#加上return
: f(10)
: 執行結果一樣
: 10
: 9
: 8
: 7
: 6
: 5
: 4
: 3
: 2
: 1
: 但我好奇在背景是否有差別呢?
: 謝謝指教
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 70.114.251.20
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1460082875.A.53F.html
推
04/08 10:55, , 1F
04/08 10:55, 1F
→
04/08 10:56, , 2F
04/08 10:56, 2F
推
04/09 01:20, , 3F
04/09 01:20, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):