30秒でわかるRecursive

役に立ったらGitHub ⭐をいただけると嬉しいです!
スポンサーのご支援は、JavaやC++など、より多くの言語サポートにつながります。

Tip 1. アルゴリズムの解答コードをそのまま貼り付け

解答コードを関数ごとそのまま貼り付けるだけ。コメントもOK、パラメータは自動で検出されます。入力値を埋めて実行を押してください。

入力例

// 配列を昇順にソートして返す
//
// 解き方
// 隣接する2つの要素を比較し、大きい方を後ろへ送る。
// 1周ごとに最大値が末尾に確定する。
// 時間計算量: O(n^2)

function bubbleSort(arr) {
  const n = arr.length;
  for (let i = 0; i < n - 1; i++) {
    for (let j = 0; j < n - 1 - i; j++) {
      // 前の方が大きければ交換
      if (arr[j] > arr[j + 1]) {
        const temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return arr;
}

ライブプレビュー

ボタンを押してみてください。実際のアプリでは入力値も変更できます。

Tip 2. 関数のないただのコードでも動作します

関数で囲まれていないコードでも問題なく実行できます。パラメータの入力は不要 — そのまま ▶ 実行 を押してください。

const arr = [5, 3, 8, 1, 2];
let total = 0;
for (let i = 0; i < arr.length; i++) {
  total += arr[i];
}
console.log(total);

Tip 3. ブログやNotionに埋め込み

ブログ、Notion、Obsidianなど、iframeに対応する場所であればどこでも実行画面を埋め込めます。実行画面の上部にある Embed ボタンをクリックすると、iframeコードをコピーできます。高さの調整も可能で、Notionでは /embed を使ってURLを貼り付けるだけです。

<iframe src="https://recursive.oilater.com/embed?preset=bubble-sort"
  width="100%" height="600"
  style="border:none;border-radius:8px;" />

Tip 4. PythonとJavaScriptに対応

  • Pythonは標準ライブラリ(collections、functools、itertoolsなど)を自由に使えます。
  • JavaScript / TypeScriptの型は自動で除去されます。Math、JSON、Arrayメソッドなどの組み込みAPIはすべて動作します。

Tip 5. 未対応の機能

  • 非同期コード(setTimeout、Promise、async/await)にはまだ対応していません。
  • JavaScriptのclass構文はまだ動作しません。
  • Pythonは標準ライブラリのみ対応。numpy、pandasなどは使えません。
  • 非常に大きな入力では実行が停止することがあります。テストサイズは適度に保ってください。
  • Java、C、C++などはブラウザで直接実行できず、別途サーバーが必要です。現在このプロジェクトはサーバーなしで動作しているため、これらの言語はまだ対応していません。
  • 複数行入力(競技プログラミングサイトのようなstdin形式の入力など)には対応していません。値は関数のパラメータとしてのみ渡せます。

Tip 6. フィードバックはいつでも歓迎

機能リクエストやバグ報告はいつでも歓迎します。GitHub Issuesに投稿してください。PRでの直接コントリビュートも大歓迎です。

更新履歴

GitHub Issuesをもとに機能を改善しています。すべてのIssueを見る →

  • 関数呼び出しをスタックフレームとして可視化
  • 再帰呼び出しツリーのマウスドラッグによるパン操作
  • Python対応
  • 埋め込み対応(ブログ、Notion、Obsidianなど)
  • i18n対応(韓国語 / 英語)
  • Docsページの追加