擅长:python、mysql、java
<p>实际上,你有一个很好的平滑函数<code>n</code>,你想最大化它。<code>n</code>必须是整数,但我们可以将该函数视为实数的函数。在这种情况下,<code>n</code>的最大整数值必须接近(紧挨着)最大化实数值。在</p>
<p>我们可以使用伽马函数将{<cd4>}转换为实函数,并使用数值优化技术来寻找最大值。另一种方法是用斯特林近似代替阶乘。这给出了一个中等复杂但容易处理的代数表达式。这个表达式不难区分,设置为零就可以找到极值。在</p>
<p>我这样做了,得到了</p>
<pre><code>n * (b + (n-a) * log((n-a)/n) ) = a * b - a/2
</code></pre>
<p>用代数方法求解并不简单,但在数值上却很容易(如你所建议的,使用牛顿法)。在</p>
<p>我可能在代数中犯了一个错误,但是我在Wolfram Alpha中输入了a=77,b=100的例子,得到了180.58,所以这个方法似乎可行。在</p>