Nを取得して2を返す関数が必要ですん -1。シンプルに聞こえますが、関数は再帰的でなければなりません。これまでのところ2つしかありませんん:
def required_steps(n):
if n == 0:
return 1
return 2 * req_steps(n-1)
演習では、「パラメータnは常に正の整数であり、0より大きいと想定できます。
結果に追加のパラメーターを使用するr
-
def required_steps (n = 0, r = 1):
if n == 0:
return r - 1
else:
return required_steps(n - 1, r * 2)
for x in range(6):
print(f"f({x}) = {required_steps(x)}")
# f(0) = 0
# f(1) = 1
# f(2) = 3
# f(3) = 7
# f(4) = 15
# f(5) = 31
ビット単位の左シフト<<
を使用して書き込むこともできます-
def required_steps (n = 0, r = 1):
if n == 0:
return r - 1
else:
return required_steps(n - 1, r << 1)
出力は同じです
Nの元の値を記憶するプレースホルダーを用意し、最初のステップ、つまりn == N
、戻り値2^n-1
n = 10
# constant to hold initial value of n
N = n
def required_steps(n, N):
if n == 0:
return 1
Elif n == N:
return 2 * required_steps(n-1, N) - 1
return 2 * required_steps(n-1, N)
required_steps(n, N)