わんくま界隈で流行っているので、遅ればせながら参戦。
ループがだめなら、再帰でしょ。C# で実装。
Func<int, int> func = null; func = n => (1 < n) ? n + func(n - 1) : n; Console.WriteLine(func(10));
「10 から 1 になってる」って?
/) ///) /,.=゙''"/ / i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!! / / _,.-‐'~/⌒ ⌒\ / ,i ,二ニ⊃( ●). (●)\ / ノ il゙フ::::::⌒(__人__)⌒::::: \ ,イ「ト、 ,!,!| |r┬-| | / iトヾヽ_/ィ"\ `ー'´ /
これだけでは面白くないので、「Y Combinator」 ってやつを使ってみます。
static void Main(string[] args) { // Y Combinator を使って、再起を1行で書く Console.WriteLine(Fix<int>(f => n => (1 < n) ? n + f(n - 1) : n)(10)); Console.ReadLine(); } // Y Combinator static Func<T, T> Fix<T>(Func<Func<T, T>, Func<T, T>> F) { return t => F(Fix(F))(t); }
Y Combinator については、次の記事を参照して下さい。
自分は、まだ完全に理解できていません。ムズカシイorz
追記
最初のサンプルを、ちゃんと「1 から 10 まで」に書き換えてみた。
Func<int, int, int> f = null; f = (n, m) => (n < m) ? n + f(n + 1, m) : n; Console.WriteLine(f(1, 10));
Y Combinator の方は…ムズイ。