なあ、再帰関数好きな人いる? パート3 [転載禁止]©2ch.net

1デフォルトの名無しさん
垢版 |
2015/11/28(土) 18:51:38.86ID:Rc2MJzM/
なあ、再帰関数好きな人いる?
2016/03/05(土) 16:01:56.83ID:Xc1YGBo+
末尾呼びにすればぁ?
2016/03/06(日) 13:58:13.11ID:9mzH85Ox
無理して使う物ではないのは、確か。
665デフォルトの名無しさん
垢版 |
2016/03/07(月) 19:41:03.81ID:0qoaCMqF
今更だけどアッカーマンの展開ループです
https://ideone.com/dKocyf

これループに直せません?
https://ideone.com/Ub1M86
2016/03/07(月) 20:15:13.20ID:X8YwrOCo
>>665
ループ,というよりは map によるメモ化を先にするべきかと思う
2016/03/07(月) 20:44:00.00ID:ouSCK2N5
アッカーマンメモ化はやめとけ
メモリ使用量がシャレにならん。
小さい引数ならいいけど。
2016/03/07(月) 23:04:02.15ID:ouSCK2N5
と思ったけどスタック消費量は逆に減る?
よくわからんくなってきた。
669デフォルトの名無しさん
垢版 |
2016/03/07(月) 23:55:21.18ID:DhnnCcYX
>>668
アッカーマンはメモ化意味ない
2016/03/08(火) 06:31:35.48ID:mBS7w7C0
しかしヤッターマンならきっとやってくれる
2016/03/09(水) 19:45:38.58ID:8kThrIH6
>>669
それはありえない.
アッカーマン関数にメモ化は有用な手段
http://echo.2ch.net/test/read.cgi/tech/1434079972/14
2016/03/15(火) 20:46:33.65ID:Ar6pzjDU
メモ化とかメモリリークしてるに等しい欠陥技術でしょ。
2016/03/15(火) 20:54:37.80ID:RIoPtDsj
>>672
fjの昔からの議論をここで蒸し返しますか?
2016/03/25(金) 20:10:31.18ID:ARWxn+lM
再帰というソフトにはスタックというハードがあるけどほかのソフトをハードで実装するのはどうなの?
GCとかハードで実装してまったくフリーズなしに出来ないの?
2016/03/27(日) 16:40:13.75ID:WR+Y3fPV
int main(){return main();}
2016/03/31(木) 20:21:06.47ID:qF1fcJk9
とあるRubyスクリプトだけどこれと等価のC書けんの?

$f=lambda{
print "f";
return $g
}

$g=lambda{
print "g"
return $f
}

a=$f
10.times{a=a.call}
677デフォルトの名無しさん
垢版 |
2016/03/31(木) 20:26:53.36ID:+v8smRGz
rubyはcで書かれているんやで知らんかったやろ?
2016/03/31(木) 20:35:19.21ID:qF1fcJk9
そういう等価じゃなくて文法的にというか。
Cだと$fと$gの型をどうしていいかわからん。
2016/03/31(木) 21:08:44.15ID:qF1fcJk9
グローバル変数じゃなくてもこれでいけるっぽい

g=nil

f=lambda{
print "f";
return g
}

g=lambda{
print "g"
return f
}


a=f
10.times{a=a.call}
680デフォルトの名無しさん
垢版 |
2016/03/31(木) 21:11:44.63ID:+v8smRGz
typedef void *(*F)()でいいやんけ
2016/03/31(木) 21:15:14.22ID:qF1fcJk9
まじで
やってみる
2016/03/31(木) 21:20:03.99ID:qF1fcJk9
やりかたわからん。
コンパイル通るソースプリーズ
683デフォルトの名無しさん
垢版 |
2016/03/31(木) 21:36:59.68ID:+v8smRGz
これでいけるやろ
#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;
}
2016/03/31(木) 21:42:19.47ID:qF1fcJk9
g++だとエラーになるんだが。
コンパイラは何で確認した?
685デフォルトの名無しさん
垢版 |
2016/03/31(木) 21:46:42.36ID:+v8smRGz
なんでいきなりg++やねんw
これ以上はcの質問スレでもいって聞けタコ
2016/03/31(木) 21:55:26.05ID:qF1fcJk9
なんだ、結局コンパイル通ってないのか
687デフォルトの名無しさん
垢版 |
2016/03/31(木) 22:06:32.37ID:+v8smRGz
通るわアホw
つーかそんなレベルでよくその質問出来るなお前
2016/03/31(木) 22:09:21.97ID:qF1fcJk9
だからコンパイラは何つかったんよ。
こっちでも確認するから教えれ。
有料コンパイラだったら諦めるけど。
2016/03/31(木) 22:22:46.20ID:qF1fcJk9
まあ、C質問スレにもマルチしてみるわ
2016/03/31(木) 22:23:23.28ID:X8/ytHGi
>>684
ここではうまくいく
http://codepad.org/vXykoc8I
2016/03/31(木) 22:34:22.91ID:qF1fcJk9
>>690
ふーむ確かに。
コンパイラがC++だといかんの?
2016/03/31(木) 22:49:44.78ID:qF1fcJk9
キャストすればいいのか
2016/03/31(木) 22:50:45.57ID:qF1fcJk9
しかしvoid * はなにか負けたような気分になるなw
2016/03/31(木) 23:19:06.00ID:rR3RT0GR
キャストが嫌ならちゃんと型定義すればいいじゃん
と思ったがちゃんとやるには自己参照型定義みたいなのが必要になるのか
Cでそれってできるのかな

関数型Fのポインタを返す関数型をFと定義
2016/03/31(木) 23:22:26.42ID:qF1fcJk9
>>694
そう、それ!
俺もそれで悩んだ。
696デフォルトの名無しさん
垢版 |
2016/04/01(金) 00:06:13.07ID:hr4pCajV
お前はその前に悩むべき問題が山程あるだろw
2016/04/01(金) 03:40:11.25ID:0hX+vVN6
voidにキャストがどうのって、rubyでコード書くような奴に言われてもなぁ。
2016/04/01(金) 22:07:22.21ID:8s2Zo6V8
>関数型Fのポインタを返す関数型をFと定義

これ定義できる静的型言語ってあるの?
それとも本質的論理的に矛盾した型であって、どうやっても定義できないの?
2016/04/06(水) 03:07:16.94ID:0S+muf67
Forループは正直見た目が汚らしい
場合にもよるんだろうけど、再帰で書けるならそっちのほうがコードが綺麗になる
700デフォルトの名無しさん
垢版 |
2016/04/06(水) 12:22:11.84ID:N51toXoc
いかにもルビイバカらしい考え方だな
2016/04/06(水) 19:04:18.80ID:H8hE7WlY
なんでルビイなんだ?
ハスケルバカならまだわかるが。
2016/04/06(水) 23:26:38.04ID:UScN8EXw
るびいもはすけるもよく知らないんでしょ
2016/04/14(木) 21:05:36.57ID:Lg/h7ZOX
Y = λf.(λx.f (x x)) (λx.f (x x)) 
2016/04/14(木) 22:00:43.41ID:Lg/h7ZOX
#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;}
2016/04/23(土) 00:44:20.59ID:voC0Rj8b
ピクセルシェーダーで再帰関数使えるようになるのはいつだろうか
2016/04/24(日) 20:32:40.26ID:Y7E1SWkm
CPUがGPU化するのが先かGPUがCPU化するのが先か。
まあ超並列プログラムは憧れるけどね。
2016/04/26(火) 20:14:03.31ID:ymr+ysub
main = putStrLn $ q ++ show q where q = "main = putStrLn $ q ++ show q where q = "
2016/04/27(水) 01:24:44.62ID:Pvz0UkFG
超並列はどうしてもデータレースが怖いからハードウェアトランザクションは必須だな
2016/04/28(木) 20:33:07.32ID:B776VxzF
ツクツクボウシの鳴き声を一番正確に表せた奴が優勝 [無断転載禁止]©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あああああああああああああああ あ!!!!!!!
710デフォルトの名無しさん
垢版 |
2016/04/30(土) 22:02:43.20ID:uVz81x78
GitHubで匿名通信(Tor、i2p等)ができるBitComet(トラッカーサイト不要でDHTだけで日本語検索可能)
みたいな、BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
https://twitter.com/Lyrise_al

ちなみにオイラはCovenant(純粋P2Pのファイル共有ソフト)の完成が待ち遠しいプログラミングできないアスペルガーw
q
711デフォルトの名無しさん
垢版 |
2016/05/04(水) 10:34:46.82ID:PLBcNQ3k
匿名通信(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的に分散され、特定のサーバーに依存しません
712デフォルトの名無しさん
垢版 |
2016/05/05(木) 20:47:26.30ID:a3JwFvV1
眠い時にプログラム書いてたら1つの関数の中にこれでもかと再帰を詰め込んだモンスター関数を書いてしまって訳が分からなくなる
2016/05/09(月) 20:57:03.75ID:QYIZFGji
アッカーマン関数はただの再帰じゃないらしいけど、
再帰のパワーを究極まで高めたら何になるの?
2016/05/10(火) 14:12:08.45ID:zxnDb8j/
チューリングマシンになる

証明:以下より明らか
・再帰を用いて、スタックとループをそれぞれ構築できる
・スタック2つとループを用いて、チューリングマシンを模倣できる
・故に、再帰の能力はチューリングマシン以上である。
・一方で、チューリングマシンを用いて再帰を表現出来る
・よって、再帰はチューリングマシンと等価である。

# ツッコミ待ち
2016/05/10(火) 22:44:58.13ID:HO4tbZvB
突っ込み待ちというかそんなに間違ってなくない?
2016/05/11(水) 19:52:51.98ID:+rpbSEWz
なんで再帰がどうこうで喧嘩してるんだこいつらw
2016/05/11(水) 20:12:13.79ID:LnJQmy5e
グッドスタイン数列というのがペアノ算術の限界を超えた再帰という話があるらしいのだが、詳しいことはよくわからない。
でもロマンを感じる。
718デフォルトの名無しさん
垢版 |
2016/05/19(木) 19:24:04.68ID:eYV7veAj
女性限定、恋愛相談サイトオープン。
4000名のイケメンカウンセラーが在籍中♪

自己紹介動画はいつでも見放題です!

メンガ って検索してください
※本当のサイト名は英字です
719デフォルトの名無しさん
垢版 |
2016/06/19(日) 18:09:53.79ID:SmadYZ7Z
最近再帰好きだわ
2016/06/19(日) 20:03:06.77ID:d2BELKj/
ダジャレ?
2016/06/19(日) 20:41:14.58ID:N0SKT7vZ
>>719
そう言う時期が俺にもあったな...(遠い目)
2016/06/19(日) 21:07:57.12ID:OFyR5xSG
再帰で実装した方がスッキリするケースってなかなか出てこないから最近全く使ってないや
2016/06/20(月) 12:26:15.09ID:xPaMOXBK
再起なんてバグの温床だからなぁ
マインスイーパー作る時ぐらいしか使わない
2016/06/20(月) 19:47:38.77ID:YaidyggX
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まんけたひょうじする
2016/06/20(月) 23:20:34.02ID:Lsa8y5Hv
パイ焼きか?
何秒で計算できんの?
2016/06/20(月) 23:52:55.90ID:YaidyggX
$ time ./pi >/dev/null
./pi > /dev/null 0.40s user 0.00s system 99% cpu 0.400 total
一瞬やね(最適化 -O)
ちなアルゴリズムはRubyのソースについてるやつから持ってきた
2016/06/27(月) 22:23:07.70ID:99UKpQvj
深さ優先探索より幅優先探索が好きだ。
重複がある場合計算量が深さより有利だし、
メモリモリモリ積んでゴリゴリ問題を制覇する感じがたまらない。
2016/06/28(火) 10:17:41.97ID:yMD5BWvc
幅優先探索の絶対見つかる感は異常
729デフォルトの名無しさん
垢版 |
2016/07/18(月) 23:29:48.39ID:v2MXNS7u
まだ再帰一回しか使ったこと無いな。
ループでもよかった感じしたけど
2016/07/26(火) 07:09:31.44ID:HN1KCMsQ
>>33
iがインクリメント出来ないw
2016/07/26(火) 07:11:59.49ID:HN1KCMsQ
ディレクトリ掘っていく処理なら再帰の方がすっきり書ける
それ以外使ったこと無いけど
2016/07/26(火) 07:14:06.40ID:HN1KCMsQ
Javaの例外の発生源を探すのにも使った
2016/07/28(木) 22:29:51.78ID:dH/T3UwK
flattenがあると再帰書かなくて済むことがまれによくある。
2016/07/28(木) 23:29:35.59ID:dH/T3UwK
findとかディレクトリのflattenだよね〜
2016/07/30(土) 09:51:23.93ID:d/v3ZRhl
再帰は楽しい
2016/07/30(土) 22:01:40.05ID:v/rkDCKK
超簡単なハノイの塔のコードを
理解出来ない奴らばかり

俺様ステキ

再帰は楽しい
2016/07/30(土) 22:19:26.10ID:jcPMAjAY
ハノイの塔って最初誰が考えたんだろなw
まさに再帰のための問題だよなw
2016/07/31(日) 02:49:55.84ID:rhb0jFW4
>>737
エドゥアール・リュカ/1800年代後半
2016/07/31(日) 11:30:45.35ID:ea63k9Af
連分数展開って見た目的にも再帰的
あとは連平方根なんてのもあったっけ?
2016/08/01(月) 17:10:15.58ID:JXVULl1x
行列式の値を余因子行列から求めるって発想が好き
2016/08/14(日) 09:13:25.49ID:Dug1tlBQ
数学のように条件を書くだけで処理が書けるのは楽しい
2016/08/14(日) 12:23:51.18ID:fahh+/HO
>>741
では
これの値を教えてください

lim[n->∞]sin(πen!)

わりとまじです
2016/08/14(日) 12:55:12.86ID:2ASH1YAS
en==円
2016/08/16(火) 08:58:30.09ID:Q5NurgQe
順次反復分岐だけで超深いは凄いな
2016/10/13(木) 18:45:18.08ID:zUN0ltZm
>>693
これこそ C の最強な部分だ
2016/10/13(木) 18:46:47.08ID:Xwk5OgLP
void **hoge; のときに
void *fuga = hoge; でもイケてしまうときとダメな時があるんだが良く判らん。
747デフォルトの名無しさん
垢版 |
2016/10/30(日) 02:58:18.76ID:oDMcv2JQ
斉木楠雄と再帰関数って似てるよな
2016/10/30(日) 13:41:20.72ID:broC4ect
小町算の総当たり問題は綺麗にかけて好き
2016/11/06(日) 03:07:23.35ID:gP4JS71d
昔カッコつけてクラスのコンストラクトの再帰だったかループが爆発するバグを作ったことがある
バックトレース大変だった思い出
フリーダムなC言語系は好きだ
2016/11/06(日) 09:26:24.46ID:rGVVvSQ9
int main()
{
return main();
}
2016/11/06(日) 12:42:18.20ID:PPwxyKBf
>>750
なめてんの?
2016/11/09(水) 21:10:33.07ID:5TPAUZWc
再帰は面白いと思ってた時期もあった気がする。

ただ引数や戻り値を順番付けて管理しておけば処理内容はループと同じなんだよね。もちろん実行資源の内訳も。
と言うより、「再帰はループの一つである」という表現のほうが正しいか
2016/11/09(水) 22:24:15.76ID:QOOLd5xM
ハノイの塔
2016/11/10(木) 13:14:57.02ID:17noS2hU
>>752
んなわけない。明らかに別物
2016/11/10(木) 13:24:06.83ID:dxAJlx69
ただのループでスタックオーバーフローの心配はないからなぁ
2016/11/10(木) 13:27:48.38ID:dxAJlx69
x 再帰はループの一つ
x ループは再帰の一つ

o 再帰でやりたいことはループでも実現できる
o ループでやりたいことは再帰でも実現できる
2016/11/10(木) 14:27:23.84ID:hh42qZlp
>>755
ただのループが何を指すかが微妙だけど、
再帰を展開したようなループだとカーソル的な物が行き場を無くすとかはあるがな。
そもそもループ自体まやかしみたいなもんだよ。
cmpとjzでしかない。
2016/11/10(木) 14:50:09.90ID:dxAJlx69
djnz派でした
2016/11/10(木) 18:03:12.84ID:gVGtx90I
再帰関数は動作の見た目(想像)が楽しい
でも天才は漸化式求めて一発で計算する
2016/11/10(木) 18:13:46.76ID:hh42qZlp
>>758
あー、ループあるな。そういう意味では。
すまんかった。
761デフォルトの名無しさん
垢版 |
2016/11/10(木) 19:18:34.28ID:bdp7hkfZ
天才じゃないから再帰使うわ
2016/11/10(木) 19:25:25.72ID:Him+SRv0
>>755
再帰と同じようにループを実装すればオーバーフローしますけど。

>>756
実現できるのは外部仕様の話。
内部仕様の話だとこうなる。

ループを使って再帰を作ることはできる。(そもそも内部的に関数はニーモニックの段階でそう作られている)。
関数や再帰にまで抽象化 (いろいろ処理) されたものから、内部仕様としてのループを再現することはできない。


まずこうゆうときは、E(電力)あたりの最小可能処理数を考えるとわかりやすい。
あとはその処理 (抽象概念) にあなたがどのような名前をつけるか。

再帰を再帰だと思うのは、誰かが再帰に再帰という名前をつけた上、あなたもそれを再帰と思い込んだから。
実際にはループで実装されている。
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況