| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:又来了,函数递归问题
只看楼主 加入收藏
小试牛刀1989
Rank: 1
来 自:中国南宁
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-3-12
结帖率:90.91%
收藏
已结贴  问题点数:10 回复次数:8 
又来了,函数递归问题
有如下程序
    #inclde <stdio.h>
    int func(int,int);
    main()
     {  int k=4,m=1,p;
        p=func(k,m);printf("%d,",p);   《《《求此程序的详细解法,要步骤,谢谢!
        p=func(k,m);pritf("%d\n",P);
      }
     int func(int a,int b)
      {   static int m,i=2;  《《《《 《《《此段中staticde 的作用是?
           i+=m+1;m=i+a+b;
               return(m);
        }                    结果是8,17

   
   
搜索更多相关主题的帖子: 函数 递归 
2010-03-17 22:49
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:5 
这题主要是考你静态变量的使用
发现你的func对m都没有初始化你就用了起来。。。。
函数的静态变量的生命周期是整个程序的时间,也就是说只要程序没有退出,它的值是不会被释放的(实际上他是被存在数据段上,跟一般的函数变量不同,它们是存储在栈上的),并且只有第一次调用它时,它的定义时初始化才会起到作用,如:
fun (void)
{
    static int i=2;
    i++;
    printf("i = %d\n", i);
}
-----------------fun第一次被调用时,静态变量i的值被初始化为2,然后自加,此进打印出 i = 3; 当再次调用fun时,int i=2 就不起作用了,i在自加前仍然等于3,之后打印i = 4

2010-03-18 00:58
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:3 
#include <stdio.h>
int func(int,int);
main()
{
    int k=4,m=1,p;
    p=func(k,m);printf("%d,",p);
    p=func(k,m);printf("%d\n",p);
}
int func(int a,int b)
{
    static int m,i=2;    //第一次调用时:m=0,i=2            第二次调用时:m=8,i=3
    i+=m+1;m=i+a+b;      //第一次调用时:i=2+0+1,m=3+4+1=8  第二次调用时:i=3+8+1=12,m=12+4+1=17
    return(m);           //第一次调用时:返回8              第二次调用时:返回17
}

★★★★★为人民服务★★★★★
2010-03-18 07:24
cnfarer
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:179
帖 子:3330
专家分:21157
注 册:2010-1-19
收藏
得分:0 
另外说一句,这不是递归!

★★★★★为人民服务★★★★★
2010-03-18 07:25
ldg628
Rank: 12Rank: 12Rank: 12
等 级:火箭侠
威 望:3
帖 子:526
专家分:3036
注 册:2009-6-23
收藏
得分:0 
静态变量在C和C++里都是默认赋初值0或'\0,  嗯。。。学习了,竟然给忘记了。。。。汗。。。。
2010-03-18 08:51
树上月
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:114
专家分:154
注 册:2010-1-6
收藏
得分:2 
  #inclde <stdio.h>
    int func(int,int);
    main()
     {  int k=4,m=1,p;
        p=func(k,m);printf("%d,",p);   
        p=func(k,m);pritf("%d\n",P);
      }
     int func(int a,int b)
      {   static int m,i=2;     若静态储存变量m没有赋值,则系统就会规定m=0;
           i+=m+1;m=i+a+b;
               return(m);
        }   

所以第一次调用时:i=2,m=0,a=4,b=1;
                  i=i+m+1=3
                  m=i+a+b=3+4+1=8
第二次调用时:i=3,m=8,a=4,b=1;
              i=i+m+1=12
              m=i+a+b=12+4+1=17

      这个好像不是递归:
         

每一个不曾起舞的日子,都是对未来的一种辜负......
2010-03-18 12:20
小试牛刀1989
Rank: 1
来 自:中国南宁
等 级:新手上路
帖 子:26
专家分:0
注 册:2010-3-12
收藏
得分:0 
谢谢大家的解答,ldg628的提示让我获得一种举一反三的知识,
cnfarer和树上月讲解让我更深刻地理解这类题型的解法
2010-03-18 18:37
csj_65
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:63
专家分:163
注 册:2010-3-12
收藏
得分:0 
但是给变量赋初值是一个程序员应该良好的编程习惯。这样可以避免很多错误。
2010-03-18 20:55
jrkaho
Rank: 2
等 级:论坛游民
帖 子:24
专家分:55
注 册:2010-3-13
收藏
得分:0 
学习了
静态变量 系统居然默认是0;

不过 最好还是初始化  这样比较清楚易懂。

[ 本帖最后由 jrkaho 于 2010-3-18 21:15 编辑 ]
2010-03-18 21:13
快速回复:又来了,函数递归问题
数据加载中...
 
   



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

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