C++の再帰処理を使ってピラミッドパターンを出力する方法
この記事では、C++プログラミングにおける再帰処理(リカーシブ関数)を活用して、ピラミッド型のパターンを出力する方法を解説します。再帰とは、関数が自分自身を呼び出す仕組みのことで、繰り返し処理を簡潔かつ読みやすく記述できるのが大きな特徴です。
アルゴリズム
ピラミッドパターンを出力するための手順は、以下の通りです。
Step-1 ピラミッドの高さを設定する Step-2 再帰関数を使ってスペース(空白)の数を調整する Step-3 再帰関数を使ってハッシュ(#)記号の数を調整する Step-4 両方の関数を組み合わせて呼び出し、ピラミッドパターンを出力する
サンプルコード
上記のアルゴリズムに基づいて記述したC++のコード例が以下の通りです。
#include <iostream>
using namespace std;
// スペースを出力する関数
void print_space(int space){
if (space == 0)
return;
cout << " ";
// print_space() を再帰的に呼び出す
print_space(space - 1);
}
// ハッシュ記号を出力する関数
void print_hash(int pat){
if (pat == 0)
return;
cout << "# ";
// print_hash() を再帰的に呼び出す
print_hash(pat - 1);
}
// パターンを出力する関数
void Pyramid(int n, int num){
// ベースケース
if (n == 0)
return;
print_space(n - 1);
print_hash(num - n + 1);
cout << endl;
// Pyramid() を再帰的に呼び出す
Pyramid(n - 1, num);
}
int main(){
int n = 5;
Pyramid(n, n);
return 0;
}
コードの解説
このプログラムは、3つの再帰関数で構成されています。
print_space():引数で指定された回数だけ半角スペースを出力します。引数が 0 になると再帰を終了します。
print_hash():引数で指定された回数だけ「# 」を出力します。こちらも引数が 0 になると再帰を終了します。
Pyramid():ピラミッド全体を制御するメインの再帰関数です。各行ごとにスペースとハッシュ記号を出力して改行し、n が 0 になるまで自分自身を呼び出し続けます。上の行ほどスペースが多く、下の行ほど「#」が増えていくことで、ピラミッドの形が形成されます。
実行結果
上記のコードをコンパイルして実行すると、特殊文字「#」で構成された以下のピラミッドパターンが出力されます。
# # # # # # # # # # # # # # #
このように、再帰処理を組み合わせることで、ループ文を使わずに美しいピラミッドパターンを出力できます。再帰の考え方に慣れるための練習問題としても最適なので、ぜひ高さ n の値を変更して動作を確かめてみてください。
-
C++で再帰を使わずに二分木のルートからリーフへの経路を出力するプログラム
このチュートリアルでは、与えられた二分木において、ルートノードからすべてのリーフノード(葉ノード)への経路を出力するプログラムを、C++で再帰を使わずに実装する方法を解説します。例として、次のような二分木を考えてみましょう。この二分木には、34・55・29という3つのリーフノードが存在します。したがって、ルートノードからリーフノードへの経路は3つあることになります。アルゴリズムのアプローチこの問題は、再帰に頼らない反復的なアプローチで解くことができます。手順は以下のとおりです。スタックを用いて、二分木を前順走査(先行順走査)します。走査の過程で、各ノードの親ノードへのポインタをマップ(std:
-
C++でピラミッドの体積を計算するプログラムの作り方|底面の形状別の公式と実装例
ピラミッドの底面の種類に応じた辺の長さが与えられたとき、そのピラミッドの体積を計算するのが本記事のテーマです。 ピラミッドとは、外側の面がすべて三角形で構成され、それらが共通の一点(頂点)で交わることで鋭い角を形成する3次元図形です。ピラミッドの体積は、底面がどのような形状であるかによって異なります。 ピラミッドの底面にはさまざまな種類があり、代表的なものは以下の通りです。 底面の形状別の体積の求め方 三角形の底面(三角錐) 底面が三角形の場合、ピラミッドの体積は次の公式で求められます。 体積 = (1/6) × a × b × h 正方形の底面(四角錐) 底面が正方形の場合、ピラミッドの体