Oriental Code Talk ── επιστημηが与太をこく、弾幕とは無縁のシロモノ。
著作とお薦めの品々は
著作とお薦めの品々は 東方熱帯林へ。
わんくま
CodeZine
@IT
AWARDS
Microsoft MVPfor Visual Developer - Visual C++
Wankuma MVPfor いぢわる C++
Nyantora MVPfor こくまろ中国茶
Xbox
Links
投稿日時 : 2010年3月4日 16:40
思いつかなかったし、凄いと思う一方で、array.Reverse(); と書くことと大差ない気もする・・・w
それ、私も考えて、しばらく悩んだんですが、バカバカしくてやめました。誤訳ではなく、原文もそうなっています。 Reverse an array without using a loop C++で考えるとして、 配列を逆にしなければならないので、単にreverse iteretorを使えばいいというわけでもありません。 しかし、ifとgoto、あるいは再帰を使っても、それはループです。 あらかじめ要素数が分かるなら、べた書きできます。 しかしそれで面接を通るかというと、疑問です。 テンプレートメタプログラミングや、プリプロセッサメタプログラミングなら、コンパイル時に要素数がわかっていれば、実行時にはループを使わない形に展開できますが、でも、コンパイル時にはループを使っているから、それもだめだなぁと。
まてよ、原文は、 "Reverse an array without using a loop" ということは、二つ以上のループを使えばいいのでは。 もし、ループをひとつも使ってはいけないのであれば、 Reverse an array without using any loop となるはず。 原文 http://blogs.techrepublic.com.com/tech-manager/?p=3023&tag=content;leftCol
こんな感じの再帰に放り込むとかー void swap(int data[],int fast,int end) { if (fast < end) { int tmp; tmp=data[fast]; data[fast]=data[end]; data[end]=tmp; swap(data,fast+1,end-1); } } ・・・って、再帰もループと考えるん?
> ・・・って、再帰もループと考えるん? Soda さんのプログラムは末尾再帰になっているので、 末尾再帰を最適化する処理系ではループに変換されるかもしれませんね。 GCC は最適化しませんでしたっけ?
おぉ、そんな名称があったのかw 末尾再帰で調べてみて、ループと繋がりましたー。 なるほど、今時の最適化は賢いですねぇ。
まあ末尾再帰でループになるからダメという問題とは思えないので、 元々の想定回答としては再帰のような気もしますね。
しまった、元記事みてなかったー はーずーかーしーw しかも劣化してるし(^^; 結局のところ、繰り返しをどう表現するかってことですよねぇ。 ループを使わないってのが、プログラムというものの基本から否定しているような気がするw
私の感覚では、再帰といえども、ループですけどね。
「ループを使わずに配列の順序を逆にする。」 Reverse an array without using a loop 順序を逆にする 配列の 使わずに ループを すごーい! 問題文が見事に反転してるー!
> array.Reverse(); と書くことと大差ない気もする・・・w 'Reverse'って単語がコードに現れたら負けかなーとか思ったので。 > バカバカしくてやめました。 バカバカしかったので採用しましたー > 再帰といえども、ループですけどね 終了条件を設けたうえでオノレを呼び出すんだから「○○となるまで××を繰り返せ」と同義なわけで...よーするに while-loop と同じこっちゃね。末尾再帰で表現できればloopに展開できるってのはそゆことでしょぉ。
ループなしで配列の順序を逆にする祭PowerShell編
「ループを使わずに配列の順序を逆にする。」は、ひたすらifで比較して内容コピーする、いわゆるべた書きでいいなら簡単だ、
Powered by: Copyright © επιστημη