| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 416 人关注过本帖
标题:恶循环...
只看楼主 加入收藏
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
 问题点数:0 回复次数:8 
恶循环...
fun(int n,int *s)
{
int f1,f2;
if(n==1||n==2) *s=1;
else
{
fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;
}
}
main()
{
int x;
fun(6,&x);
printf("%d\n",x);
}


.....结果是8,要分析过程.
2006-03-06 11:22
虫的传人
Rank: 1
等 级:新手上路
帖 子:88
专家分:0
注 册:2006-3-5
收藏
得分:0 
这个程序求的是Fibonacci数列的,而程序求的是第六个数字,所以答案是8
求Fibonacci数列的另外一个用数组来处理的程序可能会对你的理解有点帮助:

main()
{
int i;
int f[20]={1,1};
for(i=2;i<20;i++)
f[i]=f[i-1]+f[i-2];
for(i=0;i<20;i++)//求前20个Fibonacci数列
{
if(i%5==0)printf("\n");//每5个数换行
printf("%15d",f[i]);
}
printf("\n");
}

好马不吃回头草 然而,我不是好马 可见,坏马也不吃回头草
2006-03-06 11:39
Fjcyz
Rank: 2
等 级:论坛游民
威 望:1
帖 子:175
专家分:25
注 册:2006-2-6
收藏
得分:0 
谢谢, 你写的哪个倒是容易理解多了...

就是不知如何理解我写的哪个....

最好的域名、虚拟主机、VPS  www.
2006-03-06 12:47
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
以下是引用Fjcyz在2006-3-6 11:22:00的发言:
fun(int n,int *s)
{
int f1,f2;
if(n==1||n==2) *s=1;
else
{
fun(n-1,&f1); /*此处递归,又因为*s 与&x是同一地址*/
fun(n-2,&f2);
*s=f1+f2;
}
}
main()
{
int x;
fun(6,&x);
printf("%d\n",x);
}


.....结果是8,要分析过程.

还未想透


2006-03-06 13:21
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 

不过我觉得楼主你的程序有问题,
而且问题很多,是用法上的错误,但是算法挺好的


2006-03-06 13:32
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 

int fun(int n)
{
return((n==1||n==2)?1:fun(n-1)+fun(n-2));
}
void main()
{
printf("%d\n",fun(6));
getch();
}

这样一改好点


叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-06 14:06
feng1256
Rank: 4
等 级:贵宾
威 望:14
帖 子:2899
专家分:0
注 册:2005-11-24
收藏
得分:0 
Fjcyz 你发的和6楼的思路是相同的,你写的只是把每次调用的返回值存在了第二个参数指向的变量中

叁蓙大山:工謪、稅務、嗣發 抱歉:不回答女人的问题
2006-03-06 14:09
zhangjuan
Rank: 1
等 级:新手上路
帖 子:992
专家分:0
注 册:2006-1-19
收藏
得分:0 
feng1256你的程序看起来更结构化,而且容易理解

2006-03-06 14:18
Xxibug
Rank: 1
等 级:新手上路
威 望:1
帖 子:95
专家分:0
注 册:2006-1-31
收藏
得分:0 
1256很8错,支持下

fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;

会产生这两个递归,下面的*s = ....,无论fun(n-1,&f1);还是fun(n-2,&f2);都好,它们都产生下一个fun(n-1,&f1)跟fun(n-2,&f2);这里是&跟*,所以最后一次n == 1 || n == 2,*s == 1,会改变f1或者f2的值。注意下是&跟*就不会难理解了。

=======【天上有人 地上有狼】=======
2006-03-06 15:30
快速回复:恶循环...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014964 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved