Fib(n)

CPU発表のためにマシン語で書くのに先立って、Cでそれなりに短く書いてみた。短い方がマシン語も簡潔に書けるかなー、とか。
まずは素直に再帰で↓

int f(int n){return n<2?n:f(n-1)+f(n-2);}

これはとても短く分かりやすくて良いのだけど、メモリも時間も食うし、関数呼び出しがあるのでマシン語に落とすのが面倒な気がする。
そこでこれ↓

int f(int n){int p=1,c=0;for(;n--;p=c-p)c+=p;return c;}

少し長くなるけれど、メモリも時間も改善されて関数呼び出しが消える。ローカル変数とforはマシン語でも簡単に書けそーだし。
あー、でもこれだと負のnがマズいな。n-->0にするべきか。


……担当CPUのレジスタ退避のやり方がよく分からないので、関数呼び出しを避けようとしてマス。