Pythonでa^nを計算します。Pythonで累乗を計算するさまざまな方法

スポンサーリンク

この記事では、「a」を「n」のべき乗にする計算をいくつかの異なる方法で行います。

それでは、1つの方法を順を追って見ていきましょう。

こちらもお読みください。

スポンサーリンク

方法1:基本的な考え方

a^n` を計算する最も基本的な方法は、数 a と n を何度も何度も掛け合わせることです。

この方法はかなり遅く、全く効率的ではありません。

それでも、この方法のコードは以下の通りです。

1
2
3
4
5
6
7
def basic_approach(a,n):
    ans = 1
    for i in range(n):
        ans *= a
    return ans
 
print(basic_approach(2,5))

上記のコードから得られる出力は32であり、これは正しい出力です。

さて、次のアプローチに移ろう。

方法2:通常の再帰的アプローチ

このメソッドでは、Recursion を使ってアプローチします。

もし、Recursionについてもっと知りたい場合は、以下のチュートリアルをご覧ください。

Recursionについてもっと読む。

fun(a,n) = a * fun(a,n-1)というのが基本的な考え方です。

したがって、再帰はaのn乗を計算するのに使うことができます。

コードは以下の通りです。

参考のため、コメントをつけた。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def normal_recursion(a,n):
     
    # If power is 0 : a^0 = 1
    if(n==0):
        return 1
     
    # If power is 1 : a^1 = a
    elif(n==1):
        return a
 
    # For n>=2 : a^n = a* (a^(n-1))
    term = normal_recursion(a,n-1)
    term = a * term
 
    # Return the answer
    return term
 
print(normal_recursion(2,5))

上記のコードから得られた出力は 32 であり、これは正確で正しい出力です。

次に、再帰を利用した、より良い方法を考えてみましょう。

方法3:高速な再帰的アプローチ

先ほどは線形再帰的な方法を使いましたが、nの累乗を計算するには、nの値(べき乗値)に基づいて計算することも可能です。

    1. nが偶数なら fun(a,n) = [ fun(a,n/2) ] ^ 2
  1. nが奇数の場合 fun(a,n) = a * ( [ fun(a,n/2) ] ^ 2)

これはより効率的な方法で、プログラムにかかる時間を大幅に短縮することができます

同じ方法のコードを以下に示す。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def fast_recursion(a,n):
     
    # If power is 0 : a^0 = 1
    if(n==0):
        return 1
     
    # If power is 1 : a^1 = a
    elif(n==1):
        return a
 
    # For n>=2 : n can be even or odd
 
    # If n is even : a^n = (a^(n/2))^2
    # if n is odd : a^n = a * ((a^(n/2))^2)
     
    # In both the cases we have the calculate the n/2 term
    term = fast_recursion(a,int(n/2))
    term *= term
 
    # Now lets check if n is even or odd
    if(n%2==0):
        return term
    else:
        return a*term
 
print(fast_recursion(2,5))

このコードの出力は32であり、これは正しい。

この方法は、以前の方法と比較して、半分の時間を要します。

まとめ

この記事では、再帰を含む方法と含まない方法を用いて、n乗を計算する方法を学びました。

どの方法を使っても構いませんが、最も効率の良い方法を選ぶと良いでしょう。

お読みいただきありがとうございました。

タイトルとURLをコピーしました