僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
似たような再帰。
流石に改行は入ってるが、一応One Liner。
$ awk 'function rec(num) > { if(num==1) { return 1 } > else {return num * rec(num-1) }} > BEGIN { print rec(6) }' 720
限界は再帰の回数より返す値の方のようだった。
$ awk 'function rec(num) > { if(num==1) { return 1 } > else {return num * rec(num-1) }} > BEGIN { print rec(170) }' 7257415615307994045399635715589591467896184117242257803\ 4055442117556932462152715774446149978680776400131841762\ 7198582680159774324724797907799533661942998068579328576\ 8053360886112149825437081356365699043287884614002788490\ 6945304696617530078018969625637211046192423573487359868\ 83814984039817295623520648167424 $ awk 'function rec(num) > { if(num==1) { return 1 } > else {return num * rec(num-1) }} > BEGIN { print rec(171) }' inf
掛け算でなく足し算(func(10) == 55)にしてやると もう少し多くの再帰ができた。
$ awk 'function plus(num) > { if(num==1) { return 1 } > else {return num + plus(num-1) }} > BEGIN { print plus(10000000) }' 50000005000000
plus(100000000)しようとすると、約50秒後に 強制終了となった。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。