以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 荤菜求助:求n! (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=45169) |
-- 作者:荤菜 -- 发布时间:4/10/2007 5:43:00 PM -- 荤菜求助:求n! 求n! long ff(int n) { long f; if(n<0) printf("n<0,input error"); else if(n==0||n==1) f=1; else f=ff(n-1)*n; return(f); } main() { int n; long y; printf("\ninput a inteager number:\n"); scanf("%d",&n); y=ff(n); printf("%d!=%ld",n,y); getch();} } /*输入4结果正确*/ 改成程序2 long ff(int n) { long f; if(n>1) f=ff(n-1)*n; if(n>1) n=ff(n-1)*n; |
-- 作者:girlstop -- 发布时间:4/10/2007 9:12:00 PM -- 程序2有个问题。n=2时,f=ff(1)*2。 但是ff(1)的时候,if语句不执行,直接返回f,f缺省为0.所以ff(1)=0 程序3之所以正确是因为求ff(1)的时候,虽然if语句不能执行,但是return(n)返回1.所以ff(1)=1 |
-- 作者:一分之千 -- 发布时间:4/11/2007 9:10:00 AM -- 对于求阶乘的算法来说,只有程序1是正确的,程序2 和三都是不对的,首先程序2、3都都没有考虑当数字等于0 1 的时候。 而当输入数值等于4的时候之所以出现你说的那种情况,是应为在程序2中你使用了一个未初始化的变量来作为返回值,这个函数使用了一个递归,下一步的返回值是用来作为当前步的乘数来进行计算的。当n=1的时候,f不参与计算,而又未进行初始化,这时候f默认值是一个随机的无限大的值。导致了计算结果的错误。而当你使用程序三的时候,它返回的是n的值,这恰好等于1的阶乘,结算结果就正确了。 |
-- 作者:荤菜 -- 发布时间:4/12/2007 1:57:00 PM -- 谢谢各位,我明白了。 |
-- 作者:lixiaoting -- 发布时间:7/29/2007 3:34:00 PM -- #include<stdio.h> #include<conio.h> long ff(int n) { long f; if(n==1||n==0)f=1; if(n>1)f=ff(n-1)*n; return(f); } main() { int n; long y; printf("\ninput a inteager number:\n"); scanf("%d",&n); y=ff(n); printf("%d!=%ld",n,y); getch();} |
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
125.000ms |