終了条件は決して満たされないため、これは無限再帰です。 (私は実際にはスタックオーバーフローの例外がないことに驚いています)。 n = 0のとき終了条件はあるが、すべての再帰呼び出しは、ちょうど1を追加します:n*(n+1)/2
また、あなたは次の再帰呼び出しではなく、
n * recSum (n+1)/2
のようなものへの引数として乗算を含めることが意味しました(構文が完璧でない場合は私を許してください。私はIDEの前にいません)。
おそらく、あなたは加算の代わりに減算することを意味しましたか?
逃亡のビットとして、終了条件として選択するのは、達成しようとしていることと実装しようとしている式に依存します。多くの人が現在の値から終了条件に「下がる」と考えています。例えば、あなたがフィボナッチ数について話しているならば、ほとんどの人は、これを単に「前の2つのフィボナッチ数の合計」と考えるでしょう(どちらも、以前の2つのフィボナッチ数の合計です。終わりの状態への「ダウン」)。これは完全に正しいです。例えば、5を定義するのは完全に真です! 5 * 4!とします。
また、終了条件から「処理中」と考えることもできます。私はあなたに10の価値を教えてくれるように頼んだら、計算機を使わずに値が何であったのかはほとんど分からないでしょう。しかし、もし私があなたにそれを言ったら、9! 362,880ですか?さて、10を乗算するために10を掛けることは明らかです。明らかに答えは3,628,800でなければなりません。それは事実です、11は何ですか?まあ、明らかに、11 * 3,628,800。だから、私があなたに価値を与えるならば、その値を使ってより多くの価値を "生成"することができます。 9の値を与えられれば、10を得るためにそれを乗算する以外に何もする必要はありません!
実際、あなたの知識があれば、10! = 3,628,800、簡単に9を計算することができます! 3,628,800を10で除算したものです。
いずれにしても、ポイントは同じです:「シーケンス」内の任意の値を指定すると、それらの値に適用してシーケンス内のより多くの値を計算できるというルールがあります。
この意味では、実際には終了条件を、私が推測する並べ替えの「初期条件」と呼ぶことができます。
うまくいけば、それは意味があると思いますが、そうでない場合は、必要に応じていくつか明確にすることがうれしいです。
達成しようとしていることを明確にすることはできますか?以下に述べるように、これは無限回帰ですので、別の式を実装する必要があります。要件についての詳細がわかっていれば、新しい式を見つけるのに役立ちます。 – EJoshuaS
知られているすべての入力に対して同様の処理が行われるのは、[Collatz conjecture](https://en.wikipedia.org/wiki/Collatz_conjecture)の中心にある関数です。* half-or-triple-plus-one *。あなたのスタックの限界はわかりませんが、1228の関数呼び出しをスタックすることができれば、1000億までの入力で0に達することができます。 –