| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1323 人关注过本帖
标题:递归程序怎么理解啊?
只看楼主 加入收藏
xufan
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:232
专家分:804
注 册:2008-10-20
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:9 
递归程序怎么理解啊?
请各位看看这个程序怎么算的?
#include "stdio.h"
void print(int w)
{

    int i;
    if (w!=0)
    {

        print(w-1);
        for (int i=1;i<=w;i++)
            printf("\t%d",w);
        printf("\n");
    }
}
void main()
{
   
    print(4);
}
搜索更多相关主题的帖子: 递归 
2009-12-22 12:49
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
很难理解 这东西理解起来很费脑子
一般情况下是不会用那东西的 如果考试就放弃那个题 如果为了研究算法 就抗住
2009-12-22 13:31
tdy1006
Rank: 4
等 级:业余侠客
帖 子:173
专家分:240
注 册:2009-5-13
收藏
得分:0 
函数调用自身,直到遇到出口,再一层一层返回.
2009-12-22 13:40
xufan
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:6
帖 子:232
专家分:804
注 册:2008-10-20
收藏
得分:0 
这是08年某学校的考研题,我不是蛮懂。希望大家给点意见,确切的回答。
我在等哦

~~~~~~我的明天我知道~~~。
2009-12-22 16:17
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
回复 楼主 xufan
...

[ 本帖最后由 BlueGuy 于 2009-12-22 18:10 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2009-12-22 17:56
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
收藏
得分:0 
自己下 断点 看看是怎么搞的吧, 我也不会

[ 本帖最后由 BlueGuy 于 2009-12-22 18:12 编辑 ]

我就是真命天子,顺我者生,逆我者死!
2009-12-22 17:58
sen_lin
Rank: 6Rank: 6
等 级:侠之大者
威 望:3
帖 子:114
专家分:436
注 册:2009-3-24
收藏
得分:10 
相当于把前几次的运算进行堆栈,当w=1时,print(0);执行结束开始执行print后续的for循环,然后再把w=1出栈,运算w=2,依次进行。
2009-12-22 18:26
浩加加
Rank: 2
等 级:论坛游民
帖 子:51
专家分:14
注 册:2009-11-12
收藏
得分:0 
调用自身,一直到最后后调用结束.

向来缘浅.奈何情深 如花美眷.似水流年
2009-12-22 18:30
iFreeBSD
Rank: 4
等 级:业余侠客
威 望:4
帖 子:474
专家分:236
注 册:2007-11-5
收藏
得分:10 
首先这个程序的复杂读为0(N),其次根据复杂度画出递归树。然后可以肯定和这个程序的功能完全一样。过程就是这样理解的。
 #include "stdio.h"
void print1(int) ;
void print2(int) ;
void print3(int) ;
void print4(int) ;

void print1(int w) {
        if(w) {
            for(int i = 1 ; i <=w ;i++)
                printf("\t%d" , w) ;
            printf("\n") ;
         }
}
void print2(int w) {
        print1(w-1) ;
        if(w) {
            for(int i = 1 ; i <=w ;i++)
                printf("\t%d" , w) ;
            printf("\n") ;
         }
}
void print3(int w) {
        print2(w-1) ;
        if(w) {
            for(int i = 1 ; i <=w ;i++)
                printf("\t%d" , w) ;
            printf("\n") ;
         }
}
void print4(int w) {
        print3(w-1) ;
        if(w) {
            for(int i = 1 ; i <=w ;i++)
                printf("\t%d" , w) ;
            printf("\n") ;
         }
}
 int main()
{

    print4(4);
}

[ 本帖最后由 iFreeBSD 于 2009-12-22 20:04 编辑 ]

without further ado, let’s get started
2009-12-22 20:03
whoami7788
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-12-13
收藏
得分:0 
你这递归函数不难理解,算是很简单的了。函数调用自身,直到遇到出口(w = 1),再一层一层返回(从w=1开始输出 1 ; w=2 输出两个二 ;  w=3 输出三个三; w=4 输出四个四 )
理解了吗? 不理解可以加我qq:448146607 我们多多交流。
2012-04-20 23:58
快速回复:递归程序怎么理解啊?
数据加载中...
 
   



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

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