| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 304 人关注过本帖
标题:求解答做题中的疑惑!!!!!!!
只看楼主 加入收藏
戈壁滩
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-3-6
结帖率:33.33%
收藏
已结贴  问题点数:5 回复次数:5 
求解答做题中的疑惑!!!!!!!
有下列程序:
#include
void fun(int n,int *p)
{int f1,f2;
if(n==1||n==2)*p=1;
else
{fun(n-1,&f1);fun(n-2,&f2);
*p=f1+f2;
  }
}
main()
{int s;
fun(3,&s);printf("%d\n",s);
}



最后的结果为2;
但是为什么两个1要相加得到结果?
2012-03-06 10:54
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:5 
这个一个递归函数

fun(3,&s);执行的时候

因为n!=1,n!=2,所以执行fun(n-1,&f1);  

因为n-1==2,所以f1=1;

然后函数接着执行fun(n-2,&f2);

因为n-2==1  所以f2=1;

然后执行*p=f1+f2=2;

回到主函数,显示2

另外#include 后面应该有  <stdio.h>
2012-03-06 11:08
戈壁滩
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-3-6
收藏
得分:0 
回复 2楼 share32
那为什么*p=1的两个值要分别赋值给f1,f2?
2012-03-06 11:18
share32
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:214
专家分:663
注 册:2011-12-1
收藏
得分:0 
回复 3楼 戈壁滩
执行fun(n-1,&f1);  
执行fun(n-1,&f2);  

的时候   &f1\&f2是实参,p是它们对应的形参.
所以&f1=p
*p=1,导致 f1=1

f2同样的道理.
 
 
2012-03-06 11:54
戈壁滩
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-3-6
收藏
得分:0 
回复 4楼 share32
哦,有点懂了,谢谢!
2012-03-06 13:00
戈壁滩
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2012-3-6
收藏
得分:0 
回复 2楼 share32
结账第一种没成功,只有用平均结账了
2012-03-06 13:02
快速回复:求解答做题中的疑惑!!!!!!!
数据加载中...
 
   



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

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