その数式、プログラムできますか? list2-1

c++ のソースをpythonに移植



int multiply0(int n, int a) {
if (n == 1) rturn a;
return multiply0(n - 1, a) + a;
}

c++ のソースをpythonに移植したい


以下がC++の再帰的な乗算関数 multiply0 をPythonに移植したものです。
元のC++コード(修正前のもの)

C++

int multiply0(int n, int a) {
if (n == 1) rturn a; // ← ここはtypo(returnのはず)
return multiply0(n - 1, a) + a;
}


Pythonへの移植(自然な書き方)

Python

def multiply0(n: int, a: int) -> int:
if n == 1:
return a
return multiply0(n - 1, a) + a


もっとPythonらしい書き方(おすすめ)

Python

def multiply(n: int, a: int) -> int:
"""n × a を再帰で計算する(ただし非効率)"""
if n == 1:
return a
if n == 0:
return 0
return multiply(n - 1, a) + a


# 使い方例
print(multiply(5, 3)) # 15
print(multiply(10, 7)) # 70
print(multiply(4, 100)) # 400

さらに短く書くことも可能(Pythonらしい書き方)

Python

def mul(n: int, a: int) -> int:
return a if n == 1 else mul(n-1, a) + a


注意点

元のC++コードは nが0以下 の場合を考慮していないので、無限再帰やスタックオーバーフローになる危険があります。
Pythonでも同じ問題があります。実用するなら以下のようにガードを入れるのが安全です。

Python

def safe_multiply(n: int, a: int) -> int:
if n <= 0:
return 0
if n == 1:
return a
return safe_multiply(n - 1, a) + a


必要であれば「nが負でも正しく動く版」や「末尾再帰最適化を意識した版」も作れますが、
まずは一番シンプルな形から始めるのがおすすめです。😄





コメント

人気の投稿