Excel VBA質問スレ Part7at TECH
Excel VBA質問スレ Part7 - 暇つぶし2ch552:デフォルトの名無しさん
08/07/22 23:29:56
>>551
てか、別に末尾再帰を経なくても全然いい。普通に再帰をループになおせさえすれば。
末尾再帰という形式になった再帰呼び出しのコードは、
ループの形に必ず書き直せるという性質が成り立つだけ。
一応、どういうものかだけ↓に書いておいた。
<<末尾再帰にする前>>
function factorial&(byval i%)
if i = 0 then
factorial = 1
else
factorial = i * factorial(i - 1) ' factorial(i - 1)の前に i * という『残りの操作』が残っているので末尾再帰ではない
end if
end function
<<末尾再帰にした後 (別にVBAでは末尾再帰にしても速くなるわけでも最適化されるわけでもない。Lispなら勝手に最適化される)>>
function factorial&(byval i%, optional result& = 1)
if i = 0 then
factorial = result
else
factorial = factorial(i - 1, i * result) ' 『残りの操作』が残っていないのでこれは末尾再帰
end if
end function
<<上記をループに書き直した後(VBAでもこういう形にすればスタックなぞ一定量しか要らん)>>
function factorial&(byval r%)
dim result&
dim i%
factorial = 1
for i = 1 to r
factorial = factorial * i
next i
end function

まあなんだ、末尾再帰とか勉強したかったらSchemeとかHaskellとか勉強すればいいんじゃね?


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch