C++で配列内の全要素の合計を求めるプログラム|再帰と反復の2つの実装方法を解説
問題の概要
本記事では、n個の整数値を含む配列 arr[] が与えられたとき、その配列内のすべての要素の合計を求めるC++プログラムの作成方法を解説します。
プログラムの説明 ― 与えられた配列の全要素を順番に加算し、その合計値を返します。
まずは、具体的な例を見ながら問題を理解しましょう。
入力
arr[] = {3, 1, 7, 2, 9, 10}
出力
32
説明
Sum = 3 + 1 + 7 + 2 + 9 + 10 = 32
解法のアプローチ
配列内の要素の合計を求めるには、配列を先頭から順に走査し、各要素を1つずつ取り出しては変数 sumVal に加算していきます。走査が完了した時点での sumVal の値が、求める合計となります。
この処理は、主に次の2つの方法で実装できます。
- 再帰を使う方法
- 反復(ループ)を使う方法
方法1:再帰を使った実装
再帰的なアプローチでは、「n個目の要素」と「残りの(n-1)個の要素の合計」を足し合わせる処理を繰り返します。要素数が1になった時点で再帰を終了し、その要素の値を返します。
サンプルコード
#include <iostream>
using namespace std;
int calcArraySum(int arr[], int n){
// 要素数が1の場合は、その要素自体が合計となる
if(n == 1){
return arr[n-1];
}
// 最後の要素と、それ以外の要素の合計を加算する
return arr[n-1] + calcArraySum(arr, n-1);
}
int main(){
int arr[] = {1, 4, 5, 7, 6};
int n = sizeof(arr)/ sizeof(arr[0]);
cout << "The sum of elements in a given array is " << calcArraySum(arr, n);
return 0;
}
出力
The sum of elements in a given array is 23
方法2:反復(ループ)を使った実装
反復的なアプローチでは、forループを使って配列を先頭から末尾まで走査し、各要素を順番に sumVal に加算していきます。再帰に比べてスタックオーバーフローの心配がなく、大きな配列にも対応しやすいのが特徴です。
サンプルコード
#include <iostream>
using namespace std;
int calcArraySum(int arr[], int n){
int sumVal = 0;
for(int i = 0; i < n; i++){
sumVal += arr[i];
}
return sumVal;
}
int main(){
int arr[] = {1, 4, 5, 7, 6};
int n = sizeof(arr)/ sizeof(arr[0]);
cout << "The sum of elements in a given array is " << calcArraySum(arr, n);
return 0;
}
出力
The sum of elements in a given array is 23
まとめ
配列の要素の合計を求める処理は、再帰と反復のどちらの方法でも実装可能です。どちらのプログラムも、配列 {1, 4, 5, 7, 6} に対して正しく「23」という合計を出力しました。実務ではシンプルで効率的な反復(ループ)方式がよく使われますが、再帰的な考え方を学ぶうえでも、両方の実装を理解しておくと有益です。
-
配列の全要素を乗算するC++プログラムの解説
整数型の要素を持つ配列が与えられたとき、配列内のすべての要素を掛け合わせ、その積を表示することを考えます。本記事では、この問題をC++(C言語スタイルのコード)で解く方法を、アプローチ、アルゴリズム、サンプルコード、実行結果まで順を追って解説します。 例 入力: arr[]={1,2,3,4,5,6,7} 出力: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 入力: arr[]={3, 4, 6, 2, 7, 8, 4} 出力: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭
-
C++入門:ポインタを使って配列の要素にアクセスする方法
ポインタとは、変数のメモリ上の位置(アドレス)を格納するための特殊な変数です。言い換えれば、ポインタは特定のメモリ位置を参照しており、そのメモリ位置に格納された値を取得することを「デリファレンス(間接参照)」と呼びます。まずは、ポインタを使用して配列の単一の要素にアクセスする基本的なプログラムを見てみましょう。例1:配列の1つの要素にアクセスする#include <iostream> using namespace std; int main() { int arr[5] = {5, 2, 9, 4, 1};