求一道C语言题目的详细解法。。。求高手

[复制链接]
查看11 | 回复5 | 2011-9-19 01:24:19 | 显示全部楼层 |阅读模式
源程序如下#includestdio.hintfun(intn,int*s){intf1,f2;if(n==1||n==2)*s=1;else{fun(n-1,fun(n-2,*s=f1f2;}}main(){intx;fun(6,defds123x);print(\"%d\\n\",x);}求最后的输出结果,题目绝对没有错,解不出来证明你C语言没有学好,答案我知道,我序言详细的解题步骤,求高手。。。
回复

使用道具 举报

千问 | 2011-9-19 01:24:19 | 显示全部楼层
这是斐波那契数列的递归实现#includestdio.hintfun(intn,int*s){intf1,f2;if(n==1||n==2)//对于1,2位,值都为1*s=1;else{fun(n-1,//当前位置的前一位,参数都是一样的fun(n-2,//当前位置的前二位*s=f1f2;//当前位置的值是前两位之和}}voidmain(){intx;fun(6,//传递第6位,以及一个变量的地址,用来计录第6位的值printf(\"%d\\n\",x);}斐波那契数列:1,1,2,3,5,8,13......fun6=fun5fun4=8fun5=fun4fun3=5fun4=fun3fun2=3fun3=fun2fun1=2fun2=1fun1=1像这种递归的,只有你慢慢去理解,你可以这样一步一步去看看,把6改成3;然后把运行的每一步都弄明白,然后再宏观地去看它,多练习递归是有点难的一个知识点追问懂了,没有学扎实,看错了,谢谢你了。。
回复

使用道具 举报

千问 | 2011-9-19 01:24:19 | 显示全部楼层
楼主你好,首先我先声明一下,我不是高手,解不了你的题,但是你的这段代码,太不标准了,而且还有多处错误,你这问题很无聊,赶紧删了吧,找本c语言书,找个老师,奋力学去吧追问你绝对会,而且我受教了。。
回复

使用道具 举报

千问 | 2011-9-19 01:24:19 | 显示全部楼层
这个不是很简单吗?典型的递归调用fun(6)=fun(5)fun(4)=fun(4)2fun(3)fun(2)=fun(3)2fun(2)2[fun(2)fun(1)]=5fun(2)3fun(1)=8fun(n-1,fun(n-2,*s=f1f2;*s的值,就是x的值所以,x=8
回复

使用道具 举报

千问 | 2011-9-19 01:24:19 | 显示全部楼层
8这个是求斐波那契数列的第六个数1,1,2,3,5,8
回复

使用道具 举报

千问 | 2011-9-19 01:24:19 | 显示全部楼层
应该是1吧。。就是一个递归算法。。当n==1或者n==2之后给*s赋值1.intfun(intn,int*s)fun(6,defds123x);//函数调用是传递的是x的地址。。也就是说形参*s改变实参x的值改变。*s=1,就是x=1。。最后print(\"%d\\n\",x);输出x的值好吧我丢人了。。说错了。。递归什么的确实不是很熟。。。。不过我觉得你还是自己写歌规范点的程序。单步调试看一下比较好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行