プログラミング言語によっては再帰呼び出しが可能である。つまり、サブルーチンが直接的あるいは間接的に自分自身を呼び出すことができる。クイックソートや木構造を探索するアルゴリズムなどは再帰を使った方が素直に表現できる。
サブルーチンを使用すると、引数の受け渡し、サブルーチン呼び出し、コールスタック処理、サブルーチンからの復帰などのオーバヘッドによりプログラム性能が若干低下する。実際のオーバヘッドはハードウェアおよびソフトウェアのアーキテクチャに依存する。コンパイラによってはインライン展開を効果的に使用してオーバヘッドの低減を図るものもある。
必要最小限の構造化制御フロー.
また、他の研究により入り口と出口がそれぞれひとつになっている制御構造が他の構造よりも理解し易いということが示された。特にそのような制御構造はプログラムの任意の箇所に制御構造を乱すことなく挿入可能な点が有利とされた。
しかし実は、「理論に従ってgoto 文を無くしたプログラム」が「理解し易い」ものであるか否かは不明であり、実際のところ全くそのようにはならないのである。
構造化された制御要素.
以下ではなぜかキーワードに変にこだわっているが、そういった字句にこだわるのではなく、構文（シンタックス）として総合的に捉えれば、たいしてこだわる意味はない。この節冒頭に挙げたリンク先の各記事を参照。
選択.
条件式と条件付き実行は、条件節（たいていは「式 (プログラミング)」）の評価結果の真偽によって異なる式やブロックを選択実行する。
あまり一般的でないバリエーションとして、以下のような例がある。
一般論として、関数の引数を積極評価してしまう言語では、条件実行のようなものを関数にできない。遅延評価のような機構が何かあれば、条件実行を特に言語機能にしなくても、引数を遅延評価する関数によって、条件実行もできる。
パターンマッチング.
ループ.
カウント制御ループ.
多くのプログラミング言語では、カウント制御ループでは整数のみが使われる。浮動小数点数はハードウェアの制限により精度に限界がある（「ハードウェアの制限により」ではない。そもそも間違ったプログラミングなのである）。従って次のようなループでは、
条件制御ループ.
 while (test) { do
 } while (test);