| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 905 人关注过本帖, 1 人收藏
标题:小弟我很疑惑啊,【全部积分50】求递归问题。。。(谢谢各位大神!!!!)
只看楼主 加入收藏
laazyt
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2010-7-17
结帖率:100%
收藏(1)
已结贴  问题点数:50 回复次数:10 
小弟我很疑惑啊,【全部积分50】求递归问题。。。(谢谢各位大神!!!!)
这是我写的一个简单的程序,想看看递归原理,失败。。。。。
#include<stdio.h>
void recursive(int n) ;
void main()
{
    int a;
    scanf("%d",&a);
    printf("\n\n\n");
    recursive(a);
    return ;
}
void recursive(int n)
{
    int t=1;        /*第一个问题*/
    if(n==0)
    {   
        printf("结果出来了%d\n",t++);
    }
    else if(n%2==0)
    {
        recursive(n/2);
        printf("除以2  %d\n",t++);
    }
    else if(n%2)
    {
        recursive(n-1);
        printf("减去1  %d\n",t++);
    }
}
有几个问题:
(1) 就是在标注的地方定义了t的值,程序好像是每递归一次就从头开始,所以后面的t++都为一
但是,我把那个定义改为printf("工作原理");结果就只在刚开始的时候出现“工作原理”,后面都没有了,求解.
(2) 就是递归到最后的时候,是系统将递归中参数存起来了吗?
(3)递归运行的时候,顺序是怎样的,请就这个题说一下。
其实俺是递归那块没学懂,书上的也没这个,自己看也不懂。。


[ 本帖最后由 laazyt 于 2010-7-28 13:48 编辑 ]
搜索更多相关主题的帖子: 递归 大神 积分 
2010-07-28 12:44
laazyt
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2010-7-17
收藏
得分:0 
别让他沉了啊,小弟我在线等,谢谢
2010-07-28 12:50
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:0 
你得先告诉别人:你的程序想做什么?
2010-07-28 13:07
laazyt
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2010-7-17
收藏
得分:0 
回复 3楼 BJ_BOY
这就是个递归啊,比如输入5,递归,如果是2的倍数,调用这个数除以2作参数调用函数,如果是奇数,调用这个数减1作参数调用函数,如果是0,输出
2010-07-28 13:32
BJ_BOY
Rank: 4
等 级:业余侠客
威 望:1
帖 子:77
专家分:225
注 册:2010-2-4
收藏
得分:20 
楼主,你上面的回答等于没回答:)呵呵,谁看不懂你说的那个意思呀。
据我猜测,你的程序应该改成下面的样子(在Dev C++中调试通过):

#include <stdio.h>
#include <stdlib.h>

void recursive(int n) ;
int main()
{
    int a;
    scanf("%d",&a);
    printf("\n\n\n");
    recursive(a);
    system("PAUSE");
    return 0;
}
void recursive(int n)
{
    static int t=1;        /*第一个问题*/
    if(n==0)
    {   
        printf("结果出来了%d\n",t++);
    }
    else if(n%2==0)
    {   
        printf("除以2  %d\n",t++);
        recursive(n/2);

    }
    else if(n%2)
    {   
        printf("减去1  %d\n",t++);
        recursive(n-1);
    }
}

执行示例结果如下:

201



减去1  1
除以2  2
除以2  3
除以2  4
减去1  5
除以2  6
除以2  7
除以2  8
减去1  9
除以2  10
减去1  11
结果出来了12
请按任意键继续. . .

======================================
至于你提到的那些问题,用文字回答起来很难,有些懒得去写,呵呵。如果可能,你找一本《C语言与程序设计大学教程》一书第8.5节:嵌套调用也递归调用,里面对递归程序的执行进行了很详细的分析。



2010-07-28 15:07
毕业旅行
Rank: 4
等 级:业余侠客
威 望:1
帖 子:130
专家分:280
注 册:2010-7-7
收藏
得分:30 
我估计楼主是不理解递归是咋回事,觉得那个过程用脑子很难取想清楚,导致觉得很难用。
我学的时候也是这样的。

其实最简单的理解就是,把递归中用到的部分用函数对应的部分代入就好了。
找了个例子,看看
void fun(int i)
{
if (i>0)
{
fun(i/2);
}
printf("%d\n",i);
}
intmain()
{
fun(10);
return 0;
}

展开过程如下:
void fun(int i)
{
if (i>0)
{
//fun(i/2);
if(i/2>0)
{
if(i/4>0)
{

}
printf("%d\n",i/4);
}
printf("%d\n",i/2);
}
printf("%d\n",i);
}

2010-07-28 15:23
laazyt
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2010-7-17
收藏
得分:0 
回复 5楼 BJ_BOY
我是在递归那块不太懂,恩,static可以送到函数里面去,不被销毁,谢谢
2010-07-28 15:31
laazyt
Rank: 2
等 级:论坛游民
帖 子:25
专家分:19
注 册:2010-7-17
收藏
得分:0 
回复 6楼 毕业旅行
知我者也啊,大谢。。。
2010-07-28 15:32
ggyy4k
Rank: 5Rank: 5
等 级:职业侠客
帖 子:111
专家分:334
注 册:2010-6-28
收藏
得分:0 
回复 6楼 毕业旅行
学习了
2010-07-28 16:24
三岩
Rank: 1
等 级:新手上路
帖 子:20
专家分:6
注 册:2010-7-19
收藏
得分:0 
谢六楼
2010-08-06 23:30
快速回复:小弟我很疑惑啊,【全部积分50】求递归问题。。。(谢谢各位大神!!! ...
数据加载中...
 
   



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

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