今天考二级,被绊脚了,请教一下: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的时候得不到结果?请另外的高手指教!谢谢
不是的,上述函数是在定后对自身进行了递归调用,这是允许的,何况若把1000改为10则可以输出结果,我怀疑是数值超范围了,但也说不准,晕!!
当S为int型时,只要小于25,就有结果输出,大于25就会溢出,可是为什么很大了就没有结果显示了呢?把S改成long型时,同样也是这样子,不知道是为了什么?是溢出的问题吗?
25以后也是可以算出来的,只是计算量比较大,算得慢,大家才以为没有结果我这机子可能配置不好,用了23秒 算出f(40)=102334155(程序中数据类型改为long)当然太大的话,数据也会溢出
是,都怨那道题,给了那么大一个数,结果总是死机。这是一递归函数中很有名一道题:斐波拉契级数.
声名:题中当t为0和1时应返回1,而非t.可能是我上机时看错题了