なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net
ガッはガッチャの略だろ。 ガッチャマンでお馴染みのガッチャはI have got you.の略で捕まえたとかの意味。 でもアメリカのドラマ見てると了解するときにガッチャ!って言ってるよね。
特にチャーリーズエンジェルのカエル顔が(別のドラマでも)言ってるような気がする。 それ再帰のせいじゃなくてもともと難しいアルゴリズムなんじゃ 同じコードでも言語やバージョンの違いで即死する可能性があるのがネック。
可能ならwhileにするよ。
どうでもいいスクリプトなら木にしないけど。
べ、別に再帰関数苦手なわけじゃないんだからね! 再帰否定派は生きるのがつらいんだよ
いつも周りのもの何もかも否定してるよ 無限か有限かを判別するだけでも難しい再帰コールが簡単に作れるからな 例えば再帰を使えばC++149文字で数学的に非常に判別が難しいコードが作れる
ステップ数がF_φ_ω(0) (n)のオーダー
再帰を使わないともっとずっと必要な文字数は増える つまり再帰を使うと簡単に分かりにくいコードが書けてしまうというアピール
アホなのこいつ? 適材適所
まぁ、ループは現代ではほとんど高階関数に置き換えられてはいるが 再帰、ループ、高階関数は互いに別カテゴリーの概念だけどな。 >ループは現代ではほとんど高階関数に置き換えられてはいるが
mapとかfoldって言いたいの? 最近の言語は分かり易いから好んで使う人多いみたいだね。
俺はダメだわ。単純な再帰でもアセンブラ時代の間接修飾と再帰を混合で使ってたときのトラウマが・・・ >>665
ループ,というよりは map によるメモ化を先にするべきかと思う アッカーマンメモ化はやめとけ
メモリ使用量がシャレにならん。
小さい引数ならいいけど。 と思ったけどスタック消費量は逆に減る?
よくわからんくなってきた。 メモ化とかメモリリークしてるに等しい欠陥技術でしょ。 >>672
fjの昔からの議論をここで蒸し返しますか? 再帰というソフトにはスタックというハードがあるけどほかのソフトをハードで実装するのはどうなの?
GCとかハードで実装してまったくフリーズなしに出来ないの? int main(){return main();} とあるRubyスクリプトだけどこれと等価のC書けんの?
$f=lambda{
print "f";
return $g
}
$g=lambda{
print "g"
return $f
}
a=$f
10.times{a=a.call} rubyはcで書かれているんやで知らんかったやろ? そういう等価じゃなくて文法的にというか。
Cだと$fと$gの型をどうしていいかわからん。 グローバル変数じゃなくてもこれでいけるっぽい
g=nil
f=lambda{
print "f";
return g
}
g=lambda{
print "g"
return f
}
a=f
10.times{a=a.call} typedef void *(*F)()でいいやんけ これでいけるやろ
#include <stdio.h>
typedef void *(*F)();
void *f();
void *g();
void *f()
{
puts("f");
return g;
}
void *g()
{
puts("g");
return f;
}
int main()
{
int i;
F func;
func = f;
for (i = 0; i < 10; ++i)
func = func();
return 0;
} g++だとエラーになるんだが。
コンパイラは何で確認した? なんでいきなりg++やねんw
これ以上はcの質問スレでもいって聞けタコ 通るわアホw
つーかそんなレベルでよくその質問出来るなお前 だからコンパイラは何つかったんよ。
こっちでも確認するから教えれ。
有料コンパイラだったら諦めるけど。 >>690
ふーむ確かに。
コンパイラがC++だといかんの? しかしvoid * はなにか負けたような気分になるなw キャストが嫌ならちゃんと型定義すればいいじゃん
と思ったがちゃんとやるには自己参照型定義みたいなのが必要になるのか
Cでそれってできるのかな
関数型Fのポインタを返す関数型をFと定義 voidにキャストがどうのって、rubyでコード書くような奴に言われてもなぁ。 >関数型Fのポインタを返す関数型をFと定義
これ定義できる静的型言語ってあるの?
それとも本質的論理的に矛盾した型であって、どうやっても定義できないの? Forループは正直見た目が汚らしい
場合にもよるんだろうけど、再帰で書けるならそっちのほうがコードが綺麗になる なんでルビイなんだ?
ハスケルバカならまだわかるが。 Y = λf.(λx.f (x x)) (λx.f (x x)) #include<stdio.h>
char*s="#include<stdio.h>%cchar*s=%c%s%c;main(){printf(s,10,34,s,34);return 0;}";main(){printf(s,10,34,s,34);return 0;} ピクセルシェーダーで再帰関数使えるようになるのはいつだろうか CPUがGPU化するのが先かGPUがCPU化するのが先か。
まあ超並列プログラムは憧れるけどね。 main = putStrLn $ q ++ show q where q = "main = putStrLn $ q ++ show q where q = " 超並列はどうしてもデータレースが怖いからハードウェアトランザクションは必須だな ツクツクボウシの鳴き声を一番正確に表せた奴が優勝 [無断転載禁止]©2ch.net
1 :以下、無断転載禁止でVIPがお送りします:2016/04/28(木) 08:01:56.231 ID:EVnE4ji20
ツクツクボーシッ!!!!ツクツクボーシッ!!!!ツククツ、ツククククククク……!!!
アッ ヴィーナス!!!! ヴィーナス!!!!ヴィヴィヴィヴィッ!!!!!
8 :以下、無断転載禁止でVIPがお送りします:2016/04/28(木) 08:05:05.180 ID:rZ8gq0650
ツクツクホーシ!ツクツクホーシ!ッツクツク、ツクツクホーシ!
ッ!ツクツクヴィーヨー!ツクツクヴィーヨー!ツクツクツクツクアアアアア゙ア゙ア゙ア゙ア゙…天
12 :以下、無断転載禁止でVIPがお送りします:2016/04/28(木) 08:24:50.425 ID:SYCMGSQFa
ツクツクウィーヨーンwwwwwwツクツクウィーヨーンwwwwwwウィーヨーンwwwwwwウィーヨーンwwwwwwあああああああああああああああ あ!!!!!!! GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能)
みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al
ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
q 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrent(Covenant)が活発な情報交換・交流コミュニティでオープンソース開発されています(プログラマー募集中)
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise氏)がそういう人と話したいそうなので、よろしければツイートお願いします<(_ _)>
https://twitter.com/Lyrise_al
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできない情報発信好きアスペルガーw
The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります)
検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません
t 眠い時にプログラム書いてたら1つの関数の中にこれでもかと再帰を詰め込んだモンスター関数を書いてしまって訳が分からなくなる アッカーマン関数はただの再帰じゃないらしいけど、
再帰のパワーを究極まで高めたら何になるの? チューリングマシンになる
証明:以下より明らか
・再帰を用いて、スタックとループをそれぞれ構築できる
・スタック2つとループを用いて、チューリングマシンを模倣できる
・故に、再帰の能力はチューリングマシン以上である。
・一方で、チューリングマシンを用いて再帰を表現出来る
・よって、再帰はチューリングマシンと等価である。
# ツッコミ待ち グッドスタイン数列というのがペアノ算術の限界を超えた再帰という話があるらしいのだが、詳しいことはよくわからない。
でもロマンを感じる。 女性限定、恋愛相談サイトオープン。
4000名のイケメンカウンセラーが在籍中♪
自己紹介動画はいつでも見放題です!
メンガ って検索してください
※本当のサイト名は英字です >>719
そう言う時期が俺にもあったな...(遠い目) 再帰で実装した方がスッキリするケースってなかなか出てこないから最近全く使ってないや 再起なんてバグの温床だからなぁ
マインスイーパー作る時ぐらいしか使わない import Data.Function (on)
import Data.List (concatMap, groupBy)
main =
let (f:r) = mypi 2 4 1 12 4
s = slice 5 $ slice 10 $ concatMap show r
in putStrLn (show f ++ ".")
>> putStr (unlines $ map unwords $ take 200 s)
slice :: Int -> [a] -> [[a]]
slice n ls = let q = concatMap (replicate n) [0..] :: [Int]
in map (map snd) $ groupBy ((==) `on` fst) $ zip q ls
mypi :: Integer -> Integer -> Integer -> Integer -> Integer -> [Integer]
mypi k a b a1 b1 =
let p = k * k
q = 2 * k + 1
a' = a1
b' = b1
a1' = p * a + q * a1
b1' = p * b + q * b1
loop a a1 d d1 =
if d == d1 then
d : let a' = 10 * (a `rem` b' )
a1' = 10 * (a1 `rem` b1')
in loop a' a1' (a' `quot` b') (a1' `quot` b1')
else
mypi (k + 1) a b' a1 b1'
in loop a' a1' (a' `quot` b') (a1' `quot` b1')
えんしうりつを100まんけたひょうじする $ time ./pi >/dev/null
./pi > /dev/null 0.40s user 0.00s system 99% cpu 0.400 total
一瞬やね(最適化 -O)
ちなアルゴリズムはRubyのソースについてるやつから持ってきた 深さ優先探索より幅優先探索が好きだ。
重複がある場合計算量が深さより有利だし、
メモリモリモリ積んでゴリゴリ問題を制覇する感じがたまらない。 まだ再帰一回しか使ったこと無いな。
ループでもよかった感じしたけど ディレクトリ掘っていく処理なら再帰の方がすっきり書ける
それ以外使ったこと無いけど flattenがあると再帰書かなくて済むことがまれによくある。 超簡単なハノイの塔のコードを
理解出来ない奴らばかり
俺様ステキ
再帰は楽しい ハノイの塔って最初誰が考えたんだろなw
まさに再帰のための問題だよなw