白书函数和递归

1.组合数问题

首先要解决溢出问题,在返回long long之后还要分步骤乘法..

long long C(int N, int M) {
    long long sum = 1;
    for(int i=1;i<=M; i++) {
        sum=sum*(N-M+i)/i;
    }
    return sum;
}

2.判断素数

循环结束的条件涉及到sqrt函数,需要考虑精度问题..常用的就是floor(x+0.5)..

int is_prime(int x)
{
    int i;
    int m;
    m=floor(sqrt(x)+0.5);
    for(i=2;i<=m;i++)
        if(x%i==0) return 0;
    return 1;
}

3.栈溢出的问题

每次递归调用都需要往调用栈里增加一个栈帧,久而久之就会越界,建议把较大的数组放在main函数外,是因为局部变量也会存在于堆栈段中,增加栈溢出的可能性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容