你这个递归函数不对,造成栈资源耗尽,应该改为是:
泗洪网站制作公司哪家好,找成都创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。成都创新互联公司成立与2013年到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选成都创新互联公司。
N大于等于2时,
a=N*fun(N-1)
注意一下细节问题。
#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);
}
}
那要看你输入的是什么,还有具体问题具体分析。
比如说有的时候让你输入除数,你输入了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 语句来预防个别想不到的情况吗?其实思想都是相同的。 第三种的话,没办法,你只能是在写程序的时候认真点,写完后在认真检查一下。其实归根结底还是你想到想不到的问题。
基本上就这么多了,考虑周全一点,我是不是常说吗,不要把你的客户当成比你还厉害的人,要把客户想的最傻,你才能编写出最完美的程序来。
希望能对你有所帮助,加油!!
#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!='#'
递归的算法不对啊
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