int f(int &n){int f=1;while(n>1){f*=n;n--;}return f;这个求n!的函数有什么问题

如题所述

没什么本质错误
(1) 你的n 是引用,你这样做会改变n本身的值 建议你用 形参 f(int n)
(2) 没有考虑溢出,n! 一般值都很大,你做好做一下判断,否者很容易溢出的
比如n多少 反回-1 表示 错误。
你也可以用long 行加大范围
需要比较复杂的计算, 一般公司面试题,考n! 一个是看你会不会用递归,一个是看你考虑溢出了没。
温馨提示:内容为网友见解,仅供参考
无其他回答

int f(int &n){int f=1;while(n>1){f*=n;n--;}return f;这个求n!的函...
没什么本质错误 (1) 你的n 是引用,你这样做会改变n本身的值 建议你用 形参 f(int n)(2) 没有考虑溢出,n! 一般值都很大,你做好做一下判断,否者很容易溢出的 比如n多少 反回-1 表示 错误。你也可以用long 行加大范围 需要比较复杂的计算, 一般公司面试题,考n! 一个是看...

int f(int n){ if(n==1)return 1; else return (n*f(n-1)); }这个函...
这个函数是用来求阶乘的,用了递归方法。输入100,就会得到100的阶乘。但是由于数值太大,会导致溢出。建议将返回值类型改为 double 型。计算N的阶乘需要进行N次乘法运算,因此时间复杂度为O(N)。

int f(int n){ return (n*f(n-1)); }这个函数有错么?正确的怎么写...
你这是一个递归函数,递归函数应该有一个函数出口,就是最简单的那种情况,比如当n==1时,返回1,这样程序才不至于无限制的运行下去。写成类似下面的程序段。int f(int n){ if(n==1)return 1;else return (n*f(n-1));}

.写一个求切的阶乘函数fac,在主函数中输入整数m n,调用函数fad,利用公...
include<stdio.h>int fac(int n){int f=1; while(n>1) f*=n--; return f;}int main(){ int n,m; scanf("%d%d",&n,&m); printf("%d\\n",fac(m)\/(fac(n)*fac(m-n))); return 0;}

...int f(int n){if(n==1)return 1;else return f(n-1)+1;} main...
f(1)=1 f(2)=f(1)+1=2 i=1 j+=f(1)=1 j=1 i=2 j+=f(1)+1=2 j=3 循环结束。

int f(int n) {if(n) return f(n-1)+n; else return n; }这个递归函数...
f(4)=f(3)+4 =f(2)+3+4 =f(1)+2+3+4 =f(0)+1+2+3+4 =0+1+2+3+4 =10

...f=1,i; for(i=1;i<=n;i++){m+=i*f; f=-f;}return m;
for循环中,循环变量i的取值范围是1到n,都是正数,而每个奇数要求是整数,每个偶数要求是负数,怎么变,就是将i*f,而f=-f起到的就是变号作用,比如奇数是f为1,而偶数时,f由f=-f;后f值变为-1,下一个奇数时,f再由f=-f;后值变为1。也就是每个奇数乘以1还是正数,每个偶数乘以-1变为...

int f(int n) { if( n == 1 || n == 2) return 1; else return f(n...
f(20)= f(19) - f(18)= f(18)-f(17) - [f(17) - f(16)]= f(18) - 2f(17) + f(16)……中间省略78个字……(反正就是往下展开)还有你写错了额 f(20)是f(19)-f(18),不是f(19)-f(20)

...int f(int n) { if(n==0||n==1) return 1; else return n*f(n-1...
这个算法实质上是在求N的阶乘,也就是说运算过程是:n*(n-1)...2*1 ,中间经过了N次运算,也就是说时间复杂度是O(n)

编写求n!的函数f(int n),在主函数中输入两个整数m、n(m、n>=0,n>m...
f(int n){int s=1;while(n!=0){s*=n;n--;}return s;}int main(){int n,m;float s;printf("请依次输入m与n的值,其中m<n\\n");scanf("%d%d",&m,&n);s=(float)1\/f(m)+(float)1\/f(n)+(float)1\/f(n-m);printf("%.2f\\n",s);return 0;}代码调试成功的。。

相似回答