关于C语言的问题,要求是用递归函数求阶乘,打出杨辉三角,程序如下,运行不起啊!求解…… 25
#include<stdio.h>intfact(intn);voidmain(){ints,i,j,k,m,n,size;printf("Thisismadeby朱成成...
#include<stdio.h>
int fact(int n);
void main()
{
int s,i,j,k,m,n,size;
printf("This is made by 朱成成(10121664),input size:");
scanf("%d",&size);
for(i=1;i<=size;i++)
{
n=i;
m=20-n;
for(k=1;k<=m;k++)
printf(" ");
s=fact (n)/(fact (m)*fact (n-m));
for(j=1;j<=n;j++)
printf("%d",s);
printf("\n");
}
}
int fact(int n)
{
int s;
if(n==1)
return(1);
s=n*fact (n-1);
return(s);
} 展开
int fact(int n);
void main()
{
int s,i,j,k,m,n,size;
printf("This is made by 朱成成(10121664),input size:");
scanf("%d",&size);
for(i=1;i<=size;i++)
{
n=i;
m=20-n;
for(k=1;k<=m;k++)
printf(" ");
s=fact (n)/(fact (m)*fact (n-m));
for(j=1;j<=n;j++)
printf("%d",s);
printf("\n");
}
}
int fact(int n)
{
int s;
if(n==1)
return(1);
s=n*fact (n-1);
return(s);
} 展开
1个回答
展开全部
楼主,你的程序貌似不是输出杨辉三角吧?
你的代码问题出在递归函数的调用上。
for(i=1;i<=size;i++)
{
n=i;
m=20-n;
for(k=1;k<=m;k++)
printf(" ");
s=fact (n)/(fact (m)*fact (n-m)); //这里,当n<m的时候,n-m是个负值,调用fact的时候,负值减1任然是负值,这个减一一直持续,递归调用一直增加,最后就栈溢出了
for(j=1;j<=n;j++)
printf("%d",s);
printf("\n");
}
}
你的代码问题出在递归函数的调用上。
for(i=1;i<=size;i++)
{
n=i;
m=20-n;
for(k=1;k<=m;k++)
printf(" ");
s=fact (n)/(fact (m)*fact (n-m)); //这里,当n<m的时候,n-m是个负值,调用fact的时候,负值减1任然是负值,这个减一一直持续,递归调用一直增加,最后就栈溢出了
for(j=1;j<=n;j++)
printf("%d",s);
printf("\n");
}
}
追问
是哦……但我改为 for(i=1;i<=size;i++)
{
n=i;
m=(size-n)/2+20;
for(k=1;k<=m;k++)
printf(" ");
s=fact (n)/(fact (m)*fact (n-m));
for(j=1;j<=n;j++)
printf("%d",s);
printf("\n");
}
}之后,还是没结果,递归函数好像没起作用啊?!
追答
你这么改,n还是有可能会小于m啊。
譬如,i=1的时候,n就是1,m就至少是20,n小于m
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询