カメヲラボ

主にプログラミングとお勉強全般について書いてます

forかwhileか再帰か(0)

某所で話題のfor or whileも興味深いのですが、私は最終的に最短になるコードを追い求めています。for文よりwhile文を使った方が短くなるパターンというのは未知の領域で、なかなか興味深い。しかしサパーリわからんというのが現状です。その他、今まで300問近く解いているにも関わらず良くわからない事があります。それは、forループを使うことで最短コードが実現できる場合と、main関数自体を再帰させることで最短になる場合のパターン分類です。大抵は、ある程度複雑なアルゴリズムを必要とするコードの場合にmain再帰が活躍します。
ここで問題なのは“複雑な場合にmain再帰で短くなることがある”という曖昧な言い方しか出来ないのは、実はテメェのコーディング能力に問題があって、本当はループの方が短く書けるのではないかというツッコミにまったく対応できないということです。

単純なコード、例えば標準入力から整数を読み込んでそれを出力するというコードを書いた場合、このようにforループの方が1B少なくて済みます。

main(n){for(;~scanf("%d",&n);)printf("%d\n",n);}
main(n){~scanf("%d",&n)&&main(printf("%d\n",n));}

main再帰の方が短くなるパターンも書き表すことができればCのショートコーディングを体系化していくヒントにもなるし、これまでmain再帰で達成した最短コードの正当性も主張できると思うのです。何か良いアイデアありませんかねぇー。