快上网专注成都网站设计 成都网站制作 成都网站建设
成都网站建设公司服务热线:028-86922220

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

为什么c语言递归函数卡死 c语言递归难吗

递归函数求n!,为什么停止工作,C语言

你这个递归函数不对,造成栈资源耗尽,应该改为是:

泗洪网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司

N大于等于2时,

a=N*fun(N-1)

大家帮我看看c语言的递归函数错在哪里,老是无法运行

注意一下细节问题。

#includestdio.h

#includestdlib.h

int d(int a[],int n, int max,int min);// 注意定义

int main()

{

int a[100],n;// 多了个逗号

int i;

printf("请输入100以内的整数的个数n=");

scanf("%d",n);

printf("\n输入数据:\n");

for(i=0;in;i++)

{

scanf("%d",a[i]);

}

printf("%d",d(a,(n-1),a[0],a[0]));// 少了括号

}

int d(int a[],int n,int max,int min)

{

if(n0)

{

printf("%d\n",min);

return max;

}

if(n=0)

{

if(a[n]max)

{

max=a[n];

}

else if(mina[n]) min=a[n];

d(a,(n-1),max,min);

}

}

c语言中 为什么有时候输入.就陷入死循环了???

那要看你输入的是什么,还有具体问题具体分析。

比如说有的时候让你输入除数,你输入了0。0是不能做除数的,而你的程序中又没有列出当用户输入0时,程序应该干什么,是应该报错呢,还是当做1处理呢。计算机不知道该怎么做,他只知道0不能做除数,那么结果就不能被计算出来,所以程序就只能等在哪个地方,也就是死循环了。

类似的,比如你让用户输入一个数字,你规定当用户输入 1 时,就执行程序 1 ,当用户输入 2 时,就执行程序 2 。就只有这两种情况,可是如果用户输入的是 3 或者其他的什么数时,那应该执行什么呢?你没说,计算机就更不知道了。除了死循环还能干什么呢?

再比如说你程序本身逻辑上的错误如 for(int i=10;i11; )

{

sum=sum+i;

}

这个 for 循环中 i 始终不变,而且 i 始终满足循环条件,那么当程序执行时就永远陷在这个循环中出不来了,也就是死循环,这应该叫临界条件不明确。

还有的时候,计算量太大,比如调用递归函数太多,计算比较慢,你也可能认为是陷入死循环了。也有是因为计算机系统本身的原因。不过这种情况比较少。

总的来说就是编程序的人考虑不够周全,如果把所有的情况都考虑进去,让每种情况都能执行下去,就基本上不会出现死循环了。

解决办法嘛,第一种,你可以在程序中把用户输入的数据先判断一下是不是0,如果是就报错,不是就继续执行。 第二种,你可以给出其他情况的解决办法, switch 语句不就是这样吗,每一个 case 值都给出一种执行语句,最后还要有一个 default 语句来预防个别想不到的情况吗?其实思想都是相同的。 第三种的话,没办法,你只能是在写程序的时候认真点,写完后在认真检查一下。其实归根结底还是你想到想不到的问题。

基本上就这么多了,考虑周全一点,我是不是常说吗,不要把你的客户当成比你还厉害的人,要把客户想的最傻,你才能编写出最完美的程序来。

希望能对你有所帮助,加油!!

C语言递归,出现死循环。代码在下面。

#include stdio.h

int Create(char *ch) {

printf("please input:\n");

scanf("%c",ch);

// printf("%c",ch;

if((*ch)!='#')

printf("%c",*ch),Create(ch);

else

printf("OK");

}

int main() {

char ch;

Create(ch);

}

判断*ch!='#'

一道关于递归函数的C语言,为什么输不出来结果呢

递归的算法不对啊

f(n+1) = 2f(n)+f(n-1)f(n-2);

所以 最终的

return f(nn-1) * 2 + f(nn-2)*f(nn-3);

这样才对

你的公式从哪里来的?

另外 由于有限定输入13

所以 你这里不应该用浮点型 而是所有数据类型都用int或者long


分享名称:为什么c语言递归函数卡死 c语言递归难吗
本文网址:http://6mz.cn/article/dochpej.html

其他资讯