这个程序如何增加速度

来源:百度知道 编辑:UC知道 时间:2024/06/28 16:13:09
怎样让这个程序加速,编译软件codeblocks或winTC,语言:c语言

int fac(long n)
{
if (n == 3)
return 3;
if(n == 2)
return 2;
if(n == 1)
return 1;
else
return fac(n - 1) + fac(n - 3);
}
int main()
{
long n, m;
printf("Please input two intergers:\n");
scanf("%ld", &n);
scanf("%ld", &m);
printf("%ld\n", fac(n) % m);

return 0;
}
要求使用数组,n<=10000,2<=m<=10000

n的范围是多少啊。。
如果是几万,几十万的话,你可以把递归改成递推来避免重复计算。
比如:
int res[10000] = {1, 1};

for(int i = 2;i < 10000;++i)
res[i] = res[i - 1] + res[i - 2];
这样效率会有很大提高。

如果n的范围更大,可以考虑用矩阵加速。