217:デフォルトの名無しさん 2015/05/29(金) 14:56:57.46 ID:AjLw/6wQ.net
お題:数列Hが以下のように定義されているとき、H(2015)を求める。
H(0) = 0
H(n) = n - H(H(H(n - 1))) (n > 0)
223:デフォルトの名無しさん 2015/05/29(金) 18:33:58.90 ID:mOKk8Lcr.net
H(2010)プログラム
224:デフォルトの名無しさん 2015/05/29(金) 20:22:03.26 ID:iCMpStJ7.net
アッカーマン関数みたいなもんか、メモ化すれば解けないこともないかな。
226:デフォルトの名無しさん 2015/05/29(金) 21:37:01.64 ID:k/z27UFZ.net
ただのリカーシブコールの問題かと思ったら違うのかw
228:デフォルトの名無しさん 2015/05/29(金) 21:52:45.50 ID:iCMpStJ7.net
>>226
ただの再起関数問題だけど、再起回数が多いので処理量が多い。
多重ループ組んでるような窮屈感がある。
229:デフォルトの名無しさん 2015/05/29(金) 22:16:08.95 ID:k/z27UFZ.net
>>228
あーやっぱり再帰の問題は再帰の問題なのか。
なんかもっとまったく別のアプローチがあるのかと
230:デフォルトの名無しさん 2015/05/29(金) 22:18:00.47 ID:iCMpStJ7.net
最適化として、処理量を落とすことを考えるって感じなんだが。
まぁ、暇なら組んでみて。
220:デフォルトの名無しさん 2015/05/29(金) 15:34:53.49 ID:7gkBDvqN.net
答え出ないんだが
こちらの処理系(gcc4.9.2)では1368
221:デフォルトの名無しさん 2015/05/29(金) 15:38:47.23 ID:CjkVTpML.net
>>220
const int N = 2005;
222:デフォルトの名無しさん 2015/05/29(金) 15:45:05.87 ID:7gkBDvqN.net
>>221
あ、ごめん
それと答え出たね
218:デフォルトの名無しさん 2015/05/29(金) 15:22:19.69 ID:CjkVTpML.net
Java
数学解らんからこれで良いのかわからないw
219:デフォルトの名無しさん 2015/05/29(金) 15:27:05.84 ID:KO9INHN8.net
Haskell
225:デフォルトの名無しさん 2015/05/29(金) 21:35:20.97 ID:iCMpStJ7.net
>>217 C++。メモ化のアイディアいっちばーんとか思ってたら、みんなやってたわ。
なのであんまり面白いコードにならなかったなぁ。
227:デフォルトの名無しさん 2015/05/29(金) 21:43:56.07 ID:gldsOPm0.net
Haskell
C
233:デフォルトの名無しさん 2015/05/30(土) 07:03:27.91 ID:oUtY+/A5.net
J
H =: 3 : 0 M.
if. y < 1 do. 0 else. y - H H H y - 1 end.
)
H 2015
1375
231:デフォルトの名無しさん 2015/05/30(土) 02:28:10.40 ID:xl0Q5N5K.net
H(10000)=6823
であってる?
(JavaScriptで約1秒で計算)
232:デフォルトの名無しさん 2015/05/30(土) 02:55:07.25 ID:XGN93yVi.net
1000 682
10000 6823
100000 68233
1000000 682328
10000000 6823278
100000000 68232781
おまけ
元スレ:http://toro.2ch.sc/test/read.cgi/tech/1429195275/