1. n=5 -> 5
  2. n=0 -> 0
  3. n=1 -> 1
  4. n=10 -> 10
  5. n=100 -> 100
  6. n=-3 -> 0
コース一覧
コンピューターサイエンス入門:理論編
forループの実行回数を返す

コンピューターサイエンス入門:理論編

2 進数、論理演算、ビット演算、データ構造、計算量、メモリモデルなど、プログラミングの土台となるコンピュータサイエンスの理論知識を学べるコースです。プログラミングを始めたばかりの学習者や、CS の体系的な土台を作りたい現役エンジニアを対象としています。約 13 時間 (1 日 30 分 × 26 日) で 53 レッスンを修了でき、修了後はコードのパフォーマンスや設計判断の根拠を理解した上で実装できるようになります。

1
2進数とビット演算
01. 2進数から10進数への変換5分
02. 10進数から2進数への変換5分
03. ビットAND演算でフラグ判定5分
04. OR / XOR でフラグを操作する5分
05. popcount で 1 のビット数を数える5分
06. シフト演算で 2 倍 / 半分5分
07. 16 進数から 10 進数への変換5分
08. 第 1 章まとめクイズ5分
2
文字コードと真偽値ロジック
01. 文字 → ASCII コード5分
02. コード → 文字5分
03. UTF-8 のバイト長を返す5分
04. AND / OR の真理値表5分
05. NOT / XOR の真理値表5分
06. 含意 (→) を AND/OR/NOT で表現5分
07. ド・モルガンの法則5分
08. 第2章まとめクイズ5分
3
計算量とBig-O
01. forループの実行回数を返す5分
02. 入れ子ループの実行回数5分
03. 線形探索 (O(n))5分
04. 二分探索 (O(log n))5分
05. バブルソート5分
06. 配列の最大と最小5分
07. 累積和で範囲合計5分
08. 第3章まとめクイズ5分
4
データ構造 (基本)
01. スタック (push/pop) を実装する5分
02. キュー (enqueue / dequeue) を実装する5分
03. カッコのバランス判定 (スタック応用)5分
04. set で重複を除去する5分
05. map で出現回数を数える5分
06. 二数の和 (map で O(n))5分
07. アナグラム判定5分
08. 第 4 章クイズ — データ構造 (基本)5分
5
ファイル / メモリ / IO 概念
01. バイト → KB 変換5分
02. ディスクサイズフォーマット5分
03. キャッシュヒット率5分
04. LRU 簡易シミュレーション5分
05. エンディアンの入れ替え (uint32)5分
06. バッファ範囲チェック5分
07. 第5章まとめクイズ5分
6
ネットワークと符号化
01. Base64 エンコード後の長さ計算5分
02. URL エンコード対象文字数5分
03. IPv4 アドレスを 32bit 整数に変換5分
04. 32bit 整数を IPv4 アドレスに変換5分
05. CIDR プレフィックスからネットマスクを作る5分
06. 単純チェックサム5分
07. 第6章まとめクイズ5分
7
設計と DB 基礎
01. 重複データを 1NF に変換 (フラットなリスト化)5分
02. キーで join (map 利用)5分
03. 残高転送のトランザクション風処理5分
04. CAP の availability 模擬5分
05. URL ルーティング5分
06. 疎結合と密結合 — 依存性注入で設計を変える12分
07. コース総まとめクイズ5分

forループの実行回数を返す

10 倍のデータで、10 倍待たされるのか

「このコードは遅いですか」と聞かれても、眺めているだけでは答えられません。100 件なら一瞬で終わったのに、10 万件を流したら帰ってこない、ということが起きます。速いか遅いかを見分ける物差しは、実行時間そのものではなく ループが何回まわるか です。回数さえ数えられれば、データが増えたときに何が起きるかを、動かす前に見積もれます。

この章の入口として、まずは「n を渡したとき、ループ本体は本当に n 回動いているのか」を自分の手で数えます。当たり前に見えて、n が 0 のときや、条件式を 1 文字書き間違えたときに、この数はあっさりずれます。

i <= n と書くと、1 回多くまわる

Python の range(n) が返すのは 0 から n - 1 までで、合計 n 個です。実際に出してみます。

Python

for i in range(3): print(i) # 0 # 1 # 2

3 は出てきません。JavaScript の書き方も範囲は同じです。

JavaScript

for (let i = 0; i < 3; i++) { console.log(i); } // 0, 1, 2

ここで i <= n や i < n + 1 と書くと、本体は n + 1 回動きます。たった 1 回の差なので結果を見ても気づきにくく、配列を触るときに範囲外アクセスとして初めて表に出ます。n が 0 や負のときは 1 回もまわらない、という点もあわせて押さえてください。

一定なのか、比例するのか

処理には、データ量に関係なく終わるものと、データ量に引きずられるものがあります。

Python

def firstPrice(prices): return prices[0]

中身が 10 件でも 100 万件でも、やることは 1 回の取り出しだけです。かかる時間は変わりません。これを O(1) と書きます。

一方、全件に対して 1 回ずつ何かをする処理は、件数が 10 倍になれば時間もおよそ 10 倍になります。これが O(n) です。1 重のループはこの形の代表で、n がそのまま回数になります。

記法は 6 つ覚えれば足りる

記法増え方典型
O(1)増えない先頭の要素を取り出す
O(log n)半分ずつ絞る並んだ中から絞り込む
O(n)比例する1 重のループ
O(n log n)比例より少し重い実用的な並べ替え
O(n^2)2 乗で増える入れ子のループ
O(2^n)手に負えない全部の組み合わせを試す

1 ステップを 1 ナノ秒とすると、n が 10 億でも O(n) はおよそ 1 秒で終わります。同じ n で O(n^2) は数十年です。オーダーが 1 段違うだけで、現実の待ち時間は桁違いになります。

解説

定数倍は無視するのが約束です。n 回でも 2n 回でも n / 2 回でも、まとめて O(n) と書きます。見たいのは増え方だけだからです。

要件

  1. for ループを使って 0 から n-1 まで実行回数を数えること
  2. n <= 0 の場合は 0 を返すこと
  3. 戻り値は整数 (int) であること

入出力例

countIterations(5) → 5 countIterations(0) → 0 countIterations(1) → 1 countIterations(10) → 10 countIterations(100) → 100 countIterations(-3) → 0

ヒント

count = 0 から始めて、for i in range(n): の中で count += 1 を繰り返す

i < n の条件式に注意。i <= n だと 1 回多くまわってしまう

n が負ならループは 1 回もまわらず 0 のまま返る

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • 入れ子ループの実行回数

    2 重ループの実行回数を数えて、O(n^2) が n の 2 乗で増えていく挙動を体感する。

  • 線形探索 (O(n))

    配列の先頭から順に target を探す線形探索を実装し、O(n) の挙動と最悪計算量を理解する。

  • 二分探索 (O(log n))

    ソート済み配列に対して中央から半分ずつ範囲を狭める二分探索を実装し、O(log n) の威力を理解する。

  • バブルソート

    隣り合う要素を比較・交換していくバブルソートを実装し、O(n^2) の整列アルゴリズムを体感する。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • ループ繰り返し処理。矢印で戻すか専用記号で示す
  • JavaScriptWeb で動的な振る舞いを担う言語
  • 配列サイズ固定の同型データの集まり
  • 処理計算や代入を表す長方形
  • 戻り値呼び出し元への返答を表す点線矢印
main.py
学習モード
エディタを読み込んでいます

メモ

forループの実行回数を返す

⌘S で保存