| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 664 人关注过本帖
标题:各位分析一下这是为什么
只看楼主 加入收藏
linghai06
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-10-27
结帖率:0
收藏
已结贴  问题点数:20 回复次数:3 
各位分析一下这是为什么
//程序的功能:例如输入1234,输出是1 2 3 4
#include <iostream.h>

void int2str(int );
void main()
{
    int num;
    cout<<"Input a number and press Enter: ";
    cin>>num;
    int2str(num);
}

//定义处理函数
void int2str(int num)
{
    int first,left_num;
    first=num%10;
    left_num=num/10;

    if (left_num<0)
    {
        cout<<'-';
        first=-first;
        left_num=-left_num;
        

    }
                                //(1)  
    if (left_num>0)
    {
        int2str(left_num);
    }
    cout<<first<<' ';          //(2)

}

例如我输入1234,程序输出1 2 3 4。我不明白为什么不是输出4 3 2 1?但是把第(2)行放在第(1)的位置上面就是输出4 3 2 1了,为什么呢?

[ 本帖最后由 linghai06 于 2011-10-27 21:11 编辑 ]
搜索更多相关主题的帖子: 分析 include number Enter 
2011-10-27 21:00
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:20 
放在2处是递归返回时输出
放在1处是递归进入时输出
好好理解递归调用栈吧。
2011-10-28 09:22
linghai06
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2011-10-27
收藏
得分:0 
回复 2楼 czsbc
谢谢你的回答。根据你的解答我做如下理解:
一、如果放在(2)处,那么递归调用完int2str之后,first存储了:
    1

    2

    3

    4
这类似堆栈,然后一个cin就把它全部输出为:1 2 3 4,中间有空格。

二、如果放在(1)处,就是每得到一个返回值就输出,所以输出了4 3 2 1.

以上的理解正确吗?谢谢。
2011-10-28 11:13
czsbc
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:469
专家分:1700
注 册:2008-12-13
收藏
得分:0 
差不多就是这个意思了。
2011-10-28 12:30
快速回复:各位分析一下这是为什么
数据加载中...
 
   



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

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