今天考二级,被绊脚了,请教一下:
int fun(int t)
{ int s;
if(t==0||t==1) return t;
s=fun(t-1)+fun(t-2);
return s;
}
main()
{ printf("%d\n",fun(1000));
}
这个程序运行时为何总是死机???
今天考二级,被绊脚了,请教一下:
int fun(int t)
{ int s;
if(t==0||t==1) return t;
s=fun(t-1)+fun(t-2);
return s;
}
main()
{ printf("%d\n",fun(1000));
}
这个程序运行时为何总是死机???
}
打红线的是错误的一行.C语言不允许重复定义(即在定义时又引用自己).可以把那一句写在主函数里,这是可以的.C语言支持自身嵌套,即就是递归.
#include"stdio.h"
int fun(int t)
{
int s;
if(t==0||t==1) return t;
else s=fun(t-1)+fun(t-2);
return s;
}
void main()
{
printf("%d\n",fun(10));
}
这实际上就是函数的递归问题,我没有改动什么,只是把数字改了一下,把1000改为10了,可以运行得到结果为55。不知道为什么1000的时候得不到结果?请另外的高手指教!谢谢
当S为int型时,只要小于25,就有结果输出,大于25就会溢出,可是为什么很大了就没有结果显示了呢?
把S改成long型时,同样也是这样子,不知道是为了什么?是溢出的问题吗?
25以后也是可以算出来的,只是计算量比较大,算得慢,大家才以为没有结果
我这机子可能配置不好,用了23秒 算出f(40)=102334155(程序中数据类型改为long)
当然太大的话,数据也会溢出
是,都怨那道题,给了那么大一个数,结果总是死机。这是一递归函数中很有名一道题:斐波拉契级数.
声名:题中当t为0和1时应返回1,而非t.可能是我上机时看错题了