新手!求解为什么会出现这问题?

走在枫之前 2014-12-21 09:21:31
2. 求组合数。计算
其中计算 C(m,n)的函数首部为:intcmn(int m, int n)
计算阶乘的函数首部为:intfac(int n)
并用cmn函数打印杨辉三角形。




#include "stdio.h"
int fac(int n)
{
int f;
if(n==1) f=1;
else f=fac(n-1)*n;
return(f);
}

int cmn(int m, int n)
{
if(m<n)
return 0;
else if(m==n)
return 1;
else
return(fac(m)/(fac(n)*fac(m-n)));
}

main()
{
int n,i,j,k;
scanf("%d",&n);
for(i=0;i<=n;i++)
{
for(j=0;j<=i;j++)
printf("%3d",cmn(i,j));
putchar('\n');
}
}


想了2个小时了,求更正!
...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
二进制加减法 2014-12-27
  • 打赏
  • 举报
回复
引用 2 楼 qq532400624 的回复:
[quote=引用 1 楼 windzhu0514 的回复:] int fac(int n) { int f; if(n==1) f=1; else f=fac(n-1)*n; return(f); } 这个函数如果n传入了0 程序就会错误 递归没有了接受条件
万分感谢!!你怎么看出来的?但是,不是当n=1时,fac返回1,他就不是不再减下去了?[/quote] 递归最怕的就是起始条件不对 和 没有结束条件 多练习下
赵4老师 2014-12-24
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
赵4老师 2014-12-22
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出 代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
走在枫之前 2014-12-21
  • 打赏
  • 举报
回复
引用 1 楼 windzhu0514 的回复:
int fac(int n) { int f; if(n==1) f=1; else f=fac(n-1)*n; return(f); } 这个函数如果n传入了0 程序就会错误 递归没有了接受条件
万分感谢!!你怎么看出来的?但是,不是当n=1时,fac返回1,他就不是不再减下去了?
二进制加减法 2014-12-21
  • 打赏
  • 举报
回复
int fac(int n) { int f; if(n==1) f=1; else f=fac(n-1)*n; return(f); } 这个函数如果n传入了0 程序就会错误 递归没有了接受条件

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧