ループを使わずに1から100までの数字を出力するCプログラムの書き方
はじめに
本記事では、for文やwhile文といったループ構文を一切使用せずに、1から100までの連続した数字を出力するCプログラムの書き方を解説します。
再帰を使ったアプローチ
この問題は「再帰」を利用することで解決できます。具体的には、自分自身を再帰的に呼び出す関数を作成します。
再帰関数には一般的に2つの重要な要素があります。それは「ベースケース」と「再帰呼び出し」です。今回の関数では、引数 n が 1 より大きい場合にのみ、n - 1 を引数として自分自身を再度呼び出します。これにより、n が 1 に到達するまで再帰呼び出しが繰り返されます。その後、再帰が戻る過程で各段階の n の値が順番に出力されるため、結果的に 1 から 100 までの数字がすべて生成される仕組みです。
サンプルコード
#include<stdio.h>
void generate_numbers(int n) {
if(n > 1) {
generate_numbers(n - 1); // 引数 n-1 で自分自身を呼び出す
}
printf("%d ", n);
}
int main() {
generate_numbers(100);
return 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 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
再帰を使う際の注意点
再帰はループの代わりとして便利ですが、呼び出しの深さが大きくなるとスタックオーバーフローのリスクがあります。今回のように100回程度の再帰であれば問題ありませんが、非常に大きな数値を扱う場合は注意が必要です。また、多くの最新コンパイラでは末尾再帰の最適化が行われる場合があり、その場合はスタック消費を抑えられます。
まとめ
ループ構文を使わなくても、再帰関数を活用すれば1から100までの数字を簡単に出力できます。ベースケースと再帰呼び出しの2つの要素を正しく設計することが、再帰プログラミングの重要なポイントです。
-
【Python】ループを使わずに数列を出力する方法:再帰呼び出しを活用した実装
はじめに 本記事では、以下の問題に対する解決策について詳しく解説します。 問題の概要 2つの整数 N と K が与えられたとき、N が 0 より大きい間は N から K を引き続けます。そして N が 0 以下になったら、今度は元の値 N に戻るまで K を足していきます。 入力例 N = 10 K = 4 出力例 10 6 2 -2 2 6 10 アルゴリズムの考え方 N が 0 より大きい間、関数を再帰的に呼び出し続けます(各呼び出しごとに N から K を減算します)。 数値が 0 以下になったら、元の値に戻るまで各呼び出しごとに K を加算します。 加算と減算は同じ1つの関数
-
ループを使わずに数列を出力するPythonプログラム|再帰とフラグで実現する方法
本記事では、for文やwhile文などのループ構文を一切使わずに数列を表示するという問題の解法について解説します。問題の定義問題: 2つの数値 N と K が与えられます。まずNが0より大きい間はNからKを繰り返し引き、Nが0以下(ゼロまたは負)になったら、今度は逆にKを足していきます。そして値が元の数値Nに戻った時点で処理を終了します。実行例N = 10K = 4出力: 10 6 2 -2 2 6 10アルゴリズムNが0より大きい間、関数を再帰的に呼び出し続けます。各呼び出しのたびにNからKを減算します。数値が0以下になったら加算モードに切り替え、各呼び出しごとにKを加算します。元の数値Nに