累乗とは?for・while・ループ・再帰法による通りの累乗の求め方

- システム
エンジニア - 累乗とはどのようなものなのでしょうか。
- プロジェクト
マネージャー - 同じ数字を繰り返しかけ算したもののことをいいます。
累乗とは?
累乗とは、同じ数字を繰り返しかけ算したもののことをいいます。23は2の3乗で、これが累乗なのです。
Javaにはpow()メソッドが用意されていますので、pow()メソッドを使えば簡単に累乗を求めることができます。
ここではpow()メソッドの他にループを使用して累乗を求めたり再帰法で累乗を求めたりと、4通りの累乗の求め方を紹介します。
JDKをインストール
ここではJavaのJDKがインストールされていて、PATHが通っているものとして話を進めます。もし、それらがまだで、JAVA_HOMEの設定もなんだかよく分からないという方は検索すればすぐに分かりますので、そちらを参考にして下さい。
きちんとJavaがインストールされているならば、PowerShellを立ち上げて、
1 2 3 4 5 6 7 |
PS C:\Users\xxxx> java --version java 16.0.1 2021-04-20 Java(TM) SE Runtime Environment (build 16.0.1+9-24) Java HotSpot(TM) 64-Bit Server VM (build 16.0.1+9-24, mixed mode, sharing) PS C:\Users\xxxx> |
などと出力されればOKです。
Javaのpow()メソッドを使って累乗を求める
Javaのpow()メソッドはMathクラスにあります。それではソースコードで確認してみましょう。
1 2 3 4 5 6 7 8 9 10 |
public class PowMethod{ public static void main(String[] args) { double a = 20; double power = 2; double result = Math.pow(a, power); System.out.println(a+" power of "+power + " = "+result); } } |
これをコンパイルし、実行すると、
1 2 3 4 |
PS (作業フォルダ)> javac .\PowMethod.java PS (作業フォルダ)> java PowMethod 20.0 power of 2.0 = 400.0 PS (作業フォルダ)> |
20.02.0が400.0であるので、Math.pow()メソッドが正しく機能しました。
pow()メソッドの使い方
pow()メソッドの使い方を簡単に説明します。第一引数にべき乗の対象となる数字の基数、第二引数に何乗するかの数字の指数を指定します。
1 2 3 |
累乗(べき乗)の結果=Math.pow(基数, 指数) |
基数と指数の順番を間違わなければMath.pow()メソッドで累乗が正確に求められます。これがJavaで累乗を求めるのに最も簡単な方法です。
whileループで累乗を求める
pow()メソッドを使わずにwhileループを使って累乗を求めます。それでは早速ソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class WhileLoop{ public static void main(String[] args) { double a = 20; double power = 2; double result = 1; double temp = power; while (temp != 0) { result *= a; --temp; } System.out.println(a+" power of "+power + " = "+result); } } |
PowerShellを立ち上げて、
1 2 3 |
PS (作業フォルダ)> javac .\WhileLoop.java PS (作業フォルダ)> java WhileLoop 20.0 power of 2.0 = 400.0 |
と出力されれば完了です。
解説
whileループのソースコードはそれほど難しいことをしていませんので、よく分かるはずです。tempという変数が登場しますが、これはpowerに代入された変数を保持したいためです。
tempにpowerの変数が代入され、
1 2 3 |
--temp; |
というようにwhileループでtempが0になればループは終了して求める累乗が求められます。ここで、ミソなのは、
1 2 3 |
result *= a; |
です。
forループで累乗を求める
whileループでできたものはforループでもできるはずで、forループで累乗を求めます。早速ソースコードを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public class ForLoop{ public static void main(String[] args) { double a = 20; double power = 2; double result = 1; double temp = power; for (;temp != 0; --temp) { result *= a; } System.out.println(a+" power of "+power + " = "+result); } } |
whileループが理解できているならばforの()内のことは説明不要でしょう。ここでミソなのはwhileループ同様、
1 2 3 |
result *= a; |
です。
PowerShellに次のように出力されればOKです。
1 2 3 |
PS (作業フォルダ)> javac .\ForLoop.java PS (作業フォルダ)> java ForLoop 20.0 power of 2.0 = 400.0 |
再帰で累乗を求める
複雑ではありますが、再帰でも累乗が求められます。早速ソースコードを見てみましょう。
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 |
public class Recursive{ static double result = 1; static void pow(double n,double p) { if(p<=0) { return; } else if(n==0 && p>=1) { result=0; return; } else result=result*n; pow(n,p-1); } public static void main(String[] args) { double a = 20; double power = 2; pow(a,power); System.out.println(a+" power of "+power + " = "+result); } } |
PowerShellを立ち上げて、
1 2 3 |
PS (作業フォルダ)> javac .\Recursive.java PS (作業フォルダ)> java Recursive 20.0 power of 2.0 = 400.0 |
と出力されればOKです。
解説
再帰法を用いて累乗を求めるにはちょっとしたコツがあります。
まず、
1 2 3 |
static void pow(double n,double p){} |
を宣言します。そして、累乗は、
1 |
pow(n, p)=n*pow(n, p-1) |
と書き直せます。この書き換えによりpow(n, p)は再帰法でプログラムが書けるのです。
今の場合、指数が0以下は考えていませんので、そのため考えなくてよいので、
1 2 3 4 5 6 |
if(p<=0) { return; } |
でreturnを返しています。
そして、再帰法で最も大切な基底条件です。基数が0の場合は指数は1以上の場合、累乗は0です。それが、
1 2 3 4 5 6 7 |
else if(n==0 && p>=1) { result=0; return; } |
の部分です。
そして、pow(n, p)=n*pow(n, p-1)の再帰の部分が次の箇所です。
1 2 3 4 5 |
else result=result*n; pow(n,p-1); |
これで再帰関数のpow()関数の完成です。
具体的な数値はmain関数で指定すれば累乗が求まるのです。
- システム
エンジニア - 累乗を求めるのにpow()メソッドやpow()メソッドなどを使うのですね。
- プロジェクト
マネージャー - Javaの累乗をより理解するために、4通りの求め方を実際に行ってみましょう。
Javaで累乗を求める4つの方法で様々な累乗を求めてみよう
いかがでしたでしょうか。Javaで累乗をまず、Javaに組み込まれているpow()メソッドで、次にwhileループで、次にforループで、最後に再帰法での4通りの求め方を紹介しました。
ここでは20.02.0のみの累乗を求めましたが、色々と数値を変えて色々な累乗を求めてみて下さい。プログラムを自分で書いて数値を変えることは更に理解が深まることなので、是非自分の手で行って下さい。
FEnetJava・Javaコラムは株式会社オープンアップシステムが運営しています。
株式会社オープンアップシステムはこんな会社です
秋葉原オフィスには株式会社オープンアップシステムをはじめグループのIT企業が集結!
数多くのエンジニアが集まります。

-
スマホアプリから業務系システムまで
スマホアプリから業務系システムまで開発案件多数。システムエンジニア・プログラマーとしての多彩なキャリアパスがあります。
-
充実した研修制度
毎年、IT技術のトレンドや社員の要望に合わせて、カリキュラムを刷新し展開しています。社内講師の丁寧なサポートを受けながら、自分のペースで学ぶことができます。
-
資格取得を応援
スキルアップしたい社員を応援するために資格取得一時金制度を設けています。受験料(実費)と合わせて資格レベルに合わせた最大10万円の一時金も支給しています。
-
東証プライム上場企業グループ
オープンアップシステムは東証プライム上場「株式会社オープンアップグループ」のグループ企業です。
安定した経営基盤とグループ間のスムーズな連携でコロナ禍でも安定した雇用を実現させています。
株式会社オープンアップシステムに興味を持った方へ
株式会社オープンアップシステムでは、開発系エンジニア・プログラマを募集しています。
年収をアップしたい!スキルアップしたい!大手の上流案件にチャレンジしたい!
まずは話だけでも聞いてみたい場合もOK。お気軽にご登録ください。


Java新着案件New Job
官公庁向け業務システム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給39万~44万円東京都千代田区(永田町駅)販売管理システム開発/Java/東京都中央区/【WEB面談可】/テレワーク
月給49万~55万円東京都中央区(京橋駅)生命保険会社向けシステム開発/Java/東京都千代田区/【WEB面談可】/テレワーク
月給42万~48万円東京都千代田区(大手町駅)社会保険システムのパッケージ開発/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(新橋駅)金融機関向けシステム更改/Java/東京都江東区/【WEB面談可】/テレワーク
月給46万~51万円東京都江東区(豊洲駅)大手通信会社者向けWebシステム改修/Java/東京都港区/【WEB面談可】/テレワーク
月給42万~48万円東京都港区(品川駅)