ループと再帰を使わずにC++で1から100までの数字を出力する方法
C++で数字を出力する際、通常はfor文やwhile文などのループ構文を使用しますが、ループや再帰を使わずに実現する方法もいくつか存在します。代表的な手法としては、goto文を利用する方法、再帰関数を利用する方法、そしてmain()関数の外に関数を定義して呼び出す方法などが挙げられます。
本記事では、その中でもgoto文を使って1から指定した最大値までの数字を出力するC++プログラムの例を紹介します。
サンプルコード:goto文を使った出力プログラム
#include <bits/stdc++.h>
using namespace std;
int main() {
int count = 1;
int x;
cout << "Enter the max value of x : ";
cin >> x;
PRINT:
cout << " " << count;
count++;
if (count <= x)
goto PRINT;
return 0;
}出力結果
Enter the max value of x : 100 1 2 3 4 5 ... 98 99 100
プログラムの解説
上記のプログラムでは、goto文を活用することで、ループ構文や再帰処理に頼らずに1から100まで(正確には入力された値xまで)の数字を出力しています。
処理の流れは以下の通りです。
- 変数
countを1で初期化し、ユーザーから最大値xを入力してもらいます。 - ラベル
PRINT:の位置で現在のcountの値を出力し、その後countをインクリメント(+1)します。 if (count <= x)の条件が真である間は、goto PRINT;によってラベル位置へ処理が戻り、同じ処理を繰り返します。countがxを超えた時点で条件が偽となり、goto文が実行されずにプログラムが終了します。
PRINT:
cout << " " << count;
count++;
if (count <= x)
goto PRINT;このように、goto文によるジャンプ処理を組み合わせることで、見かけ上はループ文がなくても繰り返し処理を実現できます。ただし、goto文はコードの可読性や保守性を低下させる要因となるため、実際の開発では使用を避けるのが一般的です。あくまでC++の制御構造を理解するための学習例として参考にしてください。
-
C++で再帰を使わずに二分木のルートからリーフへの経路を出力するプログラム
このチュートリアルでは、与えられた二分木において、ルートノードからすべてのリーフノード(葉ノード)への経路を出力するプログラムを、C++で再帰を使わずに実装する方法を解説します。例として、次のような二分木を考えてみましょう。この二分木には、34・55・29という3つのリーフノードが存在します。したがって、ルートノードからリーフノードへの経路は3つあることになります。アルゴリズムのアプローチこの問題は、再帰に頼らない反復的なアプローチで解くことができます。手順は以下のとおりです。スタックを用いて、二分木を前順走査(先行順走査)します。走査の過程で、各ノードの親ノードへのポインタをマップ(std:
-
C++で再帰を使わずに二分木のルートからリーフまでのパスを出力する方法
二分木が与えられたとき、ルートからリーフ(葉)までの複数のパスをすべて出力する必要があります。しかし、ここでの課題は再帰を使用せずに実装することです。通常、木の探索には再帰がよく使われますが、今回は制約として再帰が使えないため、反復処理(イテレーティブな方法)で木を走査します。そのために、STLのmapを活用します。このマップには各ノードとその親ノードの対応関係を格納し、レベル順走査(またはスタックを用いた走査)によってリーフノードを検出した時点で、親へのポインタをたどることでルートからリーフまでのパスを出力できます。上記の二分木の場合、ルートからリーフまで到達するためのパスは以下のように複数