c++ - 计算lg(N!) : Anyone have a Better Recursive Method?

标签 c++ recursion factorial logarithm

我认为帖子的标题解决了我的问题。但重申一下,我想知道是否有人有更好的方法来解决这个问题。

/* Write a recursive program to compute lg( N! ) */

#include <iostream>

#include <cmath>

using namespace std;

long double log_base2( long double N ) {
    return log( N )/log( 2.0 );
}

long double lg_n_factorial( long N ) {
    if( 1 == N ) return log_base2( static_cast<long double>( N ) );
    else return lg_n_factorial( N -1 ) + log_base2( static_cast<long double>( N ) );
}

int main( int argc, char *argv[] ) {
    cout << ( lg_n_factorial( 10 ) ) << endl;
    return 0;
}

根据人们的 react ,我应该澄清,这是书上的问题,书上说要递归地做。我正在练习编程问题,并尝试从其他人那里获得反馈,这样我就可以在努力成为一名更好的程序员的过程中发现自己的错误。

最佳答案

为什么要使用递归?迭代解决方案也同样有效:

long double lg_n_factorial( long N ) {
    long double result = 0;
    while (N > 1) {
        result += log_base2(static_cast<long double>(N));
        N--;
    } 
    return result;
}

这样,您可以处理的最大值仅受 LONG_MAX 值的限制,而不是受堆栈溢出之前适合的递归调用数量的限制。

关于c++ - 计算lg(N!) : Anyone have a Better Recursive Method?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6977939/

相关文章:

java - 在目录中查找文件并返回其完整路径和文件名

haskell - 此折叠实现中的错误

java - 需要解释我的汉诺塔递归代码如何工作

java - 使用科学记数法将 BigDecimal 格式化为字符串,反之亦然

c++ - 我可以像 `delete[]` 那样获取动态分配数组的大小吗?

c++ - 游戏引擎如何针对多个平台进行编译?

php - 如何在 PHP 中使用递归计算阶乘

memory - 使用整数变量在 FORTRAN 上计算阶乘。内存溢出

c++ - 与 CppUnitTestFramework 的继承

c++ - 在 OSX 10.9 上部署 Qt 5.2.1 应用程序时出现链接器错误