白书函数和递归

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函数外,是因为局部变量也会存在于堆栈段中,增加栈溢出的可能性。

你可能感兴趣的:(白书函数和递归)