- 1 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:17:14.854 ID:SnaXHmh/0
これよく分かんないんだけど
if(再帰)に返すtrue/falseってどっから仕入れてるの?- 2 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:17:48.626 ID:FtIh10JQ0
- 気仙沼
- 3 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:18:29.346 ID:SnaXHmh/0
- >>2
お前は何を言ってるんだ - 4 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:19:51.131 ID:lfI4h8fU0
- 質問の意味がわからん
- 6 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:22:31.433 ID:SnaXHmh/0
- >>4
if(dfs(i +1 , sum))if(dfs(i +1 , sum + a[i]))
こいつらが受け取ってるtrue/falseはdfsのどこから受け取ってんの
- 5 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:22:26.072 ID:dGkCI0Ee0
- お前に蟻本はまだ早いよ
- 7 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:23:17.355 ID:SnaXHmh/0
- >>5
おっ!!よくわかったね!!!!
そう蟻本読んでるの!!!
ぜひ解説していただけませんか!?
ってか俺とお友達になってください!!! - 8 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:30:09.659 ID:dGkCI0Ee0
- 俺はdfsはスタックとループで実装するので基本
- 9 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:31:29.881 ID:SnaXHmh/0
- えでも再帰がどんなふうに回ってるかは分かるんでしょ…?
助けて…助けてよ…苦しいよ… - 10 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:34:39.221 ID:QO1sW6eF0
- こういうプログラム書く奴って脳に障がいあるのかな?って思うほどヒドイソースコード
- 11 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:40:40.926 ID:SnaXHmh/0
- 苦しい…なんで最初の数十ページでこんなに苦しまないといけないの……
- 12 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:42:17.012 ID:QO1sW6eF0
- 酷過ぎる
nとkはグローバル変数だしなw - 13 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:48:33.521 ID:SnaXHmh/0
- そんなとこの話はどうでもいいんだよ?
俺は再帰の流れが知りたいの…! - 14 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 04:58:37.367 ID:l6Uk0EjG0
- 再帰してるだけとしか…
- 15 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:00:39.618 ID:SnaXHmh/0
- >>14
お前嫌い - 16 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:02:29.029 ID:l6Uk0EjG0
- >>15
😄 - 17 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:03:25.036 ID:L4PSUAZZ0
- dfs が最初に dfs を読んだ時 true か false はどこから来るのかってこと?
- 18 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:05:47.282 ID:SnaXHmh/0
- >>17
うん…
ぶっちゃけ最初じゃなくてもわかんない - 19 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:07:57.115 ID:QO1sW6eF0
- あれだ最初は
if(dfs(i+1,sum)) return true;がひたすらfalesで回る - 20 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:10:20.657 ID:SnaXHmh/0
- >>19
つまり関数の一番下に辿り着いてんの?
うーん…うーん……… - 21 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:12:53.947 ID:QO1sW6eF0
- >>20
は?バカなの?アホなの?死ぬの?
dfs()に入って
if(dfs(i+1,sum)) にひたすらたどり着く
で、i==nに達した瞬間おそらくfalseになりfalseが大量に帰る
でif(dfs(i+1,sum+a[i]))にたどり着くって仕様よ - 24 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:25:49.308 ID:SnaXHmh/0
- >>21
うぅ……
なんとなく書いてあるとおりに動きそうなのは分かるけどまだしっくりしない……
動けよこのポンコツ頭…!動けってんだよぉ…!!! - 22 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:21:15.301
- こんな時刻にプログラミングの勉強とか殊勝か!
- 23 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:25:11.402 ID:QO1sW6eF0
- んでif(dfs(i+1,sum+a[i]))にn-1でたどり着くハズ
sum+a[n-1]の値が同じならtrueが帰る
違うならfalseが帰る - 25 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:27:49.684
- いきなりステーキ
いきなり return dfs(i +1 , sum) || dfs(i +1 , sum + a[i]);
でよくね?if なんて要らなくね?(しらんけど)
- 26 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:28:32.838 ID:SnaXHmh/0
- >>25
なおさら意味わかんない - 27 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:34:35.144
- >>26
再帰童貞か?
dfs :: int -> int -> bool
なんだぞ(intとintを貰ってboolを返す)
boolを返すんだからdfs(i +1 , sum) || dfs(i +1 , sum + a[i]);
の型は
bool || bool
↓
boolとなって、これをreturnすることから、dfsが最後にboolを返すことにつじつまが合ってるだろ
型シグニチャが合ってる - 28 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:38:10.636 ID:SnaXHmh/0
- >>27
型があってんのは分かるけどこれで探索の処理が完了してるってのがよくわかんないよ
ってかどうすれば再帰の記述思いつくの
こんなん頭ガンガンしちまうけど - 29 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:38:30.589
- ちなみに再帰アレルギーを治したいなら関数型言語で鍛練を積むといいぞ
嫌がらせのように再帰再帰再帰再帰で書かされるからな
お薦めはHaskellだ - 31 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:40:08.862 ID:SnaXHmh/0
- >>29
え強くなりたいからやってみようかな……
わかりやすく教えてくれるサイトないの
おれ再帰上手く使いこなせないけど再帰のことはすごい好きなんだよ
悲しい片思いの縁をなんとか結びたい…… - 34 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:44:05.555 ID:/S5sTQA/a
- チャート絵描くと理解しやすいよ
- 35 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:46:00.768 ID:SnaXHmh/0
- ④(3==3) (0==3)//falseが帰る
ここって
if(i == n)return sum = k;
を指してるわけじゃないの - 36 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:47:45.790
- 終了条件はi==n
いずれここに訪れて止まる(boolが返る)
なので永遠にこの二分木が成長することはない
どこかで止まって、戻ってくる再帰で『分裂する度にiがインクリメントされている』ことに注意な
0から始まっていずれ、分裂したdfsの第一引数はnへ到達する - 37 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:47:53.627 ID:QO1sW6eF0
- ①で
if(0==3)//これはfalse
次でdfs(0+1,0)に突入する
②層目
③層目
④層目到達してようやくif(3==3)になりsum == kの判定になる
0==3だからfalseが帰る③層目に戻る
③層目ではfalseなので
dfs(i+1,sum)を抜ける
下の
dfs(2+1,0+1)//a[2]が呼び出される
④層目に入り
3==3の判定がtrueになり、sum==kの判定になり1==3だからfalseが帰る - 38 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 05:55:01.239
- 再帰で分裂したdfsの第一引数。これは止まるのか、無限ループなのか…。
暑い処理の夜、過熱した i は、遂に危険な領域(グローバル変数 n)へと突入する。 - 43 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 06:16:30.760 ID:QO1sW6eF0
- てか可視化してんだろ
おまえが理解してねえだけだろ
トレースまでしてやってんのに
本来自分でやる事だぞ? - 44 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 06:18:02.704 ID:SnaXHmh/0
- ごめんなさい…ごめんなさい…
う…ううっ…… - 45 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 06:20:34.476
- カッコ悪いと思っても、比較的単純なケースをチラシの裏に鉛筆使ってガチで描いて見ろ
理解できないままの方がもっとカッコ悪いんだからな - 47 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 06:23:52.957 ID:SnaXHmh/0
- >>45
分かった…今まで
void saiki(){
終了条件:
;
処理 ;
saiki();
}
こういうのしか見たことないからほんと苦しかった
今はスレ立てる前よりかは楽になれてる…
ありがとうね…ありがとう…おまえら… - 46 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 06:21:37.043
- 俺達はお前のママじゃねぇんだよ
- 48 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 06:25:14.165 ID:QO1sW6eF0
- それをif文の判定式の中に入れただけだ
- 49 名前:ひみつの名無しさん 投稿日時:2019/12/06(金) 06:26:41.437 ID:SnaXHmh/0
- >>48
ifに入れると途端に難しくなるのどうして…?
どぉぢでreturn trueずる゛の゛ぉ゛お゛ってなっちゃうじゃん…!
コメント