Pythonで関数fを次のように定義するとき、関数呼び出しf(1、3)の返す値として、最も適切なものはどれか。
def f(m,n):
if m == 0:
return n+1
elif n == 0:
return f(m-1, 1)
else:
return f(m-1、f(m、n-1))
@ 5 A 6 B 7 C 8 D 9
@
f(m, n) は
mが0なら、n+1を返す。
nが0なら、再帰的に関数f(m-1, 1)を呼び出し、結果を返す。
mもnも0でないなら、再帰的に関数 f(m-1, f(m, n - 1))を呼び出し、結果を返す。ただし、f(m, n - 1)が値を返してから、関数 f(m-1, f(m, n - 1))を呼び出す。
計算過程は以下のとおりである。
= f(0, f(0, f(1-1, f(1, 1-1))))
= f(0, f(0, f(0, f(1, 0))))
= f(0, f(0, f(0, f(1-1, 1))))
= f(0, f(0, f(0, f(0, 1))))
= f(0, f(0, f(0, 2)))
= f(0, f(0, 3))
= f(0, 4)
= 5
f(1,3) = f(1-1, f(1,3-1)) = f(0,f(1,2))
= f(0,f(1-1, f(1,2-1))) = f(0, f(0,f(1,1)))
= f(0, f(0,f(1-1, f(1,1-1))))
= f(0, f(0, f(0,f(1, 0))))
= f(0, f(0, f(0,f(1-1, 1))))
= f(0, f(0, f(0,f(0,1))))
= f(0, f(0, f(0,1+1)))
= f(0, f(0,f(0, 2)))
= f(0, f(0,2+1))
= f(0,f(0, 3))
= f(0,3+1) = f(0, 4) = 4+1
= 5
| V−6 | 目次 | V−8 |