| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 611 人关注过本帖
标题:一次有趣的小实验,大家进来讨论一下!
取消只看楼主 加入收藏
东方罗密欧
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-22
收藏
 问题点数:0 回复次数:1 
一次有趣的小实验,大家进来讨论一下!
在学习C++的过程中,遇到了一个函数互调问题,即:函数互调问题。给个例子:
#include <iostream>
using namespace std;
int one(int x);
int two(int y);
int main()
{
    int i=1;
    one(i);                       //调用one(int x)函数
    return 0;
}
int one(int x)
{
    cout<<"one()执行了"<<x/2<<"次"<<endl;
    x++;
    two(x);                             //调用two(int x)函数
    return 0;
}
int two(int y)
{
    cout<<"two()执行了"<<y/2<<"次"<<endl;
    y++;
    one(y);                            //调用one(int x)函数
    return 0;
}


在主函数中调用了one(int x)函数,one(int x) 函数又调用了 two(int y)函数,同样的two(int y)函数里面又调用one(int x)函数,如此循环的调用下去,理论上这样可以无限循环,但是在编译的时候 最多每一个函数调用只执行了5871次!起初我以为是编译器(我用的是vc++6.0编译器)有“保护措施”,于是又写了一段无限循环的代码,代码如下:
#include <iostream>
using namespace std;
int main()
{
    int i;
    for(i=1;i!=0;i++)
    cout<<"执行了"<<i<<"次"<<endl;
    return 0;
}

编译这段代码的时候,是无限循环,一直执行了几十万次也没有停止。初步排除了计算机硬件(一般是指内存)的问题。然后又改成以下代码试了一下:
#include <iostream>
using namespace std;
int main()
{
    int i;
    for(i=1;i!=0;i+=1000000)
    cout<<"执行了"<<i<<"次"<<endl;
    return 0;
}
在i的值溢出的情况下,代码段仍然一直执行,然后基本排除了数据溢出导致函数互调停止的可能性。
现在问题出来了:
1:是什么问题导致函数互调停止的?
2:每个调用的函数执行次数跟哪些因素有关?还是一个确定的值?
搜索更多相关主题的帖子: 函数互调 
2008-11-29 20:17
东方罗密欧
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-10-22
收藏
得分:0 
谢谢你!忠心感谢!
2008-11-29 20:47
快速回复:一次有趣的小实验,大家进来讨论一下!
数据加载中...
 
   



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

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