十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
你这个递归函数不对,造成栈资源耗尽,应该改为是:
成都创新互联公司是一家专注于成都做网站、成都网站制作、成都外贸网站建设与策划设计,三穗网站建设哪家好?成都创新互联公司做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:三穗等地区。三穗做网站价格咨询:028-86922220
N大于等于2时,
a=N*fun(N-1)
这个是不可以的,除非强制退出整个程序的执行,比如使用exit(0);这样的语句。
C语言的函数调用是一层一层的,本层函数执行完会返回上一层函数执行,如果一个递归函数已经调用了10层了,不可能说支持退出这十层函数的执行,直接返回最上层的函数,这个是不现实的。
但是也可以使用其他方法,比如全局变量之类的,每个函数都去判断这个全局变量,这样只要不满足,一层一层的退出函数,也可以实现这个功能,代码举例如下:
int flag=0; //全局变量,判断递归函数是否退出。
void fun1() //递归函数实现
{
xxxx //其他语句
fun1(); //递归调用
if(flag==1) //判断是否退出
{
return;
}
xxxx //其他语句
if(xxxx) //需要退出递归函数的条件
{
flag=1; //设置标志
return; //退出,这样会一直退出所有递归函数
}
}
一般都是用Ctr+c来停止。如果是程序内部的话,可以在main函数里面使用return,或者用exit()都可以让程序停止运行。
inf f(int n)
{
if(n==1)
{ return 1;}
else
{ return (2*n-1)*f(n-1);
}
}
比如n=3吧,就会返回5*3*1,大概是上面那样,可能语法不太对。
这个程序我打到电脑上了,但是运行不出来,应该是程序有问题吧。。。我想。。。但是你可以从这个角度去思考
第一次,x==1234,x%10==4,4+‘0’=='4'(因为0的ASC码值是32,32+4=36是int型,但是putchar是输出的字符型,所以再转为字符型就是4),然后执行fun(x/10),x/10==123,123%10==3,3+‘0’==‘3’,依此类推,答案是4321,但是这个程序好像没有说什么时候停
不会被执行.
从递归函数随时退出,可以直接返回不再调用自身,或者在返回时设置一个返回值告诉上一个函数不用再调用这个函数了.
至于用GOTO语句可能不行吧,GOTO语句好象只能在函数内使用.