| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1245 人关注过本帖
标题:[问题已解决][求助]递归调用和宏定义的题
只看楼主 加入收藏
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
结帖率:100%
收藏
 问题点数:0 回复次数:11 
[问题已解决][求助]递归调用和宏定义的题
1.以下程序输出结果是
#include<stdio.h>
int fun(int n,int *s)
{ int f1,f2;
if(n==0||n==1)
*s=1;
else
{ fun(n-1,&f1);
fun(n-2,&f2);
*s=f1+f2;
}
}
void main()
{ int x;
fun(6,&x);
printf("\n%d",x);
}
书上答案是:8
不过,我运行的结果是13
这是怎么算的啊???因为连续有2个递归调用,所以我就搞不清了

2.下面程序的运行结果是
#define POWER(x)((x)*(x))
main()
{ int i=1;
while(i<4)printf("%d\t%d",POWER(i++),i);
printf("\n");
}
书上的答案是:2 12
我运行后的结果是:2 112 3
这又是怎么算的啊?这里并不知道x的值?
\t 是水平制表(跳到下一个tab位置) ,这是什么意思啊?是换行还是空几格呢????

[此贴子已经被作者于2006-7-21 19:41:07编辑过]

搜索更多相关主题的帖子: 递归 int 定义 fun 
2006-07-20 20:57
摄政王:多尔滚
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2006-7-9
收藏
得分:0 
#include <stdlib.h>
#include <stdio.h>

void fun(int n, int *s) // pass n = 6
{
int f1,f2;

if(n == 0 || n == 1)
{
*s = 1;
}
else
{
fun(n - 1, &f1); // first fun(5, &f1)
fun(n - 2, &f2); // second fun(4, &f2)
*s =f1 + f2;
}
}
int main(void)
{
int x;

fun(6, &x);
printf("%d\n", x);

exit(0);
}

/***************
*
* fun(n - 1, &f1)
* a; fun(5, &f1)
* fun(4, &f1) + fun(3, &f1)
* fun(3, &f1) + fun(2, &f1) + fun(2, &f1) + fun(1, &f1)
* fun(2, &f1) + fun(1, &f1) + fun(1, &f1) + fun(1, 0) + fun(1, &f1) + fun(0, &f1) + fun(1, &f1)
* fun(1, &f1) + fun(0, &f1)+ fun(1, &f1) + fun(1, &f1) + fun(1, 0) + fun(1, &f1) + fun(0, &f1) + fun(1, &f1)
*
* a = 8
*
* fun(n - 2, &f2)
* b: fun(4, &f2)
* fun(3, &f2) + fun(2, &f2)
* fun(2, &f2) + fun(1, &f2) + fun(1, &f2) + fun(0, &f2)
* fun(1, &f2) + fun(0, &f2) + fun(1, &f2) + fun(1, &f2) + fun(0, &f2)
*
* b = 5
*
* *s= a + b
*
* *s = 13
******************/









19世纪是火车的时代,20世纪是汽车的时代,21世纪是网络的时代。有谁不同意?
2006-07-20 22:31
摄政王:多尔滚
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2006-7-9
收藏
得分:0 
#define POWER(x)((x)*(x))
main()
{ int i=1;
while(i<4)printf("%d\t%d",POWER(i++),i);
printf("\n");
}

===>
#include <stdlib.h>
#include <stdio.h>

#define POWER(x) ((x) * (x))

int main(void)
{
int i = 1;

while (i < 4)
{
printf("%d \t %d\n", POWER(i++), i);
}

exit(0);
}

/*
* printf("%d \t %d\n", ((i++) * (i++)), i);
*
**/

resutl is not fixed







19世纪是火车的时代,20世纪是汽车的时代,21世纪是网络的时代。有谁不同意?
2006-07-20 22:41
摄政王:多尔滚
Rank: 1
等 级:新手上路
帖 子:148
专家分:0
注 册:2006-7-9
收藏
得分:0 
my Linux system result:

[fanyunfei@localhost fanyunfei]$ ./a.out
1 1
9 3


19世纪是火车的时代,20世纪是汽车的时代,21世纪是网络的时代。有谁不同意?
2006-07-20 22:42
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 

第一题明白了,
第二题,
i=1时, 1 1
i=2时, 4 2
i=3时, 9 3
为什么不是这样呢?为什么答案是不确定的啊?
\t 是水平制表(跳到下一个tab位置),空几格啊?


人生没有彩排,每天都是现场直播~~~
2006-07-20 23:10
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
[fanyunfei@localhost fanyunfei]$ ./a.out
这是什么啊?

人生没有彩排,每天都是现场直播~~~
2006-07-20 23:12
aiyuheng
Rank: 1
等 级:新手上路
威 望:1
帖 子:656
专家分:0
注 册:2006-1-12
收藏
得分:0 
以下是引用Sally_SJL在2006-7-20 23:12:43的发言:
[fanyunfei@localhost fanyunfei]$ ./a.out
这是什么啊?

应该是linux的提示符


when i want to ask anyone,i will ask myself first.
2006-07-20 23:21
穆扬
Rank: 1
等 级:禁止发言
帖 子:1910
专家分:0
注 册:2006-6-1
收藏
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽

2006-07-21 08:16
Sally_SJL
Rank: 1
等 级:新手上路
威 望:2
帖 子:452
专家分:1
注 册:2006-7-14
收藏
得分:0 
第二题是不是在不同的编译器,有不同的答案啊?

人生没有彩排,每天都是现场直播~~~
2006-07-21 18:22
工藤♀新一
Rank: 1
等 级:新手上路
帖 子:140
专家分:0
注 册:2006-5-4
收藏
得分:0 

第2题按照语法的话我觉得应该是
1,3
9,5
至于编译器为什么那么输出, 不懂~


很高兴能和大家一起学习程序! QQ:114109098
2006-07-21 18:45
快速回复:[问题已解决][求助]递归调用和宏定义的题
数据加载中...
 
   



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

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