发新话题
打印

[已解决] 求教这个题怎么做啊 分析

求教这个题怎么做啊 分析

阅读下面程序,则称须执行结果为(  )。
#include <stdio.h>
fun (int k,int  *p)
{
int a,b;
if (k==1||k==2)
       *p=1;
else {    fun(k-1,&a);
               fun(k-2,&b);
                *p=a+b;}   
}

void main ()
{
int x;
fun (6,&x);
printf("%d\n",x);
}

[ 本帖最后由 lixiao3717 于 2008-8-2 22:39 编辑 ]

TOP

见证人类的懒惰

TOP

答案是 8  
运行了一下就是8  
但是我就是不会做,反复调用fun函数,没有返回值,指针也很多,一会就把我搞晕了

是不是这种题有特殊方法?还是我理解错了?

请高手指教啊  

谢谢

TOP

回复 2楼 的帖子

不是吧 难道很简单?

我真的不会  能教教我么  
谢谢

TOP

递归~
你下断点一步一步慢慢看~

TOP

真不好意思, 错怪了楼主, 这道题目的确不是很容易.
复制内容到剪贴板
代码:
#include <stdio.h>
fun (int k,int  *p)
{
  int a,b;
  if (k==1||k==2)
    *p=1;
  else {
    fun(k-1,&a);
    fun(k-2,&b);
    *p=a+b;
  }   
}

void main ()
{
  int x;
  fun (6,&x);
  printf("%d\n",x);
}
里面有个递归,也有指针,这个题目很折腾人
我的思路不太成熟, lz仅供参考

运行
fun 6
  然后有两个递归
  fun 5
  fun 4

同样的思路, 一层一层地往下解,直到出现1 或者2
fun 6
  fun 5
    fun 4
      fun 3
        fun 2
        fun 1
      fun 2
    fun 3
      fun 2
      fun 1
  fun 4
    fun 3
      fun 2
      fun 1
    fun 2

到1和2时就可以得到结果1, 然后一层一层地往上加
fun 5
  5
  fun 4
    3
    fun 3
      2
      fun 2
        1
      fun 1
        1
    fun 2
      1
  fun 3
    2
    fun 2
      1
    fun 1
      1
fun 4
  3
  fun 3
    2
    fun 2
      1
    fun 1
      1
  fun 2
    1

最后fun 4+fun 5=3 + 5 = 8

递归的题目貌似应该用堆栈的思想来理解, 我的表达也许不大清楚, 希望楼主能参考一下, 顺便表达一下我的歉意
本帖最近评分记录
  • KingsamChen 现金 +20 感谢分享,加分鼓励 2008-8-2 21:59

TOP

同意逍遥,这题目相当恶心~
那个fun最多要调用15次MS~

TOP

给LZ画个图好了……

TOP

附件: 您所在的用户组无法下载或查看附件
本帖最近评分记录
  • Liangent 现金 +18 感谢分享,加分鼓励 2008-8-2 23:15

TOP

谢谢 斑竹了  画图解决简单多了
也谢谢 ssword
麻烦你们了!!

TOP

ps:顺便改下分类,改成已解决,谢了~

TOP

HAO

TOP

分析的不错,支持

TOP

引用:
原帖由 lixiao3717 于 2008-8-2 22:29 发表
谢谢 斑竹了  画图解决简单多了
也谢谢 ssword
麻烦你们了!!
推荐自己单步调试~~~
本帖最近评分记录
  • KingsamChen 现金 +10 我很赞同,加分鼓励 2008-8-3 20:52

TOP

发新话题