C++
 Computer >> コンピューター >  >> プログラミング >> C++

ループと再帰を使わずに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まで)の数字を出力しています。

処理の流れは以下の通りです。

  1. 変数countを1で初期化し、ユーザーから最大値xを入力してもらいます。
  2. ラベルPRINT:の位置で現在のcountの値を出力し、その後countをインクリメント(+1)します。
  3. if (count <= x)の条件が真である間は、goto PRINT;によってラベル位置へ処理が戻り、同じ処理を繰り返します。
  4. countxを超えた時点で条件が偽となり、goto文が実行されずにプログラムが終了します。
PRINT:
cout << " " << count;
count++;
if (count <= x)
    goto PRINT;

このように、goto文によるジャンプ処理を組み合わせることで、見かけ上はループ文がなくても繰り返し処理を実現できます。ただし、goto文はコードの可読性や保守性を低下させる要因となるため、実際の開発では使用を避けるのが一般的です。あくまでC++の制御構造を理解するための学習例として参考にしてください。

  1. C++で再帰を使わずに二分木のルートからリーフへの経路を出力するプログラム

    このチュートリアルでは、与えられた二分木において、ルートノードからすべてのリーフノード(葉ノード)への経路を出力するプログラムを、C++で再帰を使わずに実装する方法を解説します。例として、次のような二分木を考えてみましょう。この二分木には、34・55・29という3つのリーフノードが存在します。したがって、ルートノードからリーフノードへの経路は3つあることになります。アルゴリズムのアプローチこの問題は、再帰に頼らない反復的なアプローチで解くことができます。手順は以下のとおりです。スタックを用いて、二分木を前順走査(先行順走査)します。走査の過程で、各ノードの親ノードへのポインタをマップ(std:

  2. C++で再帰を使わずに二分木のルートからリーフまでのパスを出力する方法

    二分木が与えられたとき、ルートからリーフ(葉)までの複数のパスをすべて出力する必要があります。しかし、ここでの課題は再帰を使用せずに実装することです。通常、木の探索には再帰がよく使われますが、今回は制約として再帰が使えないため、反復処理(イテレーティブな方法)で木を走査します。そのために、STLのmapを活用します。このマップには各ノードとその親ノードの対応関係を格納し、レベル順走査(またはスタックを用いた走査)によってリーフノードを検出した時点で、親へのポインタをたどることでルートからリーフまでのパスを出力できます。上記の二分木の場合、ルートからリーフまで到達するためのパスは以下のように複数