| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 866 人关注过本帖
标题:函数递归的问题
只看楼主 加入收藏
文武两边随
Rank: 2
等 级:论坛游民
帖 子:40
专家分:39
注 册:2009-7-23
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:15 
函数递归的问题
#include<stdio.h>
void reverse()
{
char a;
scanf("%c",&a);
if(a!='\n')
{
  
  reverse();
    printf("%c",a);
}
}

int main()
{
reverse();
return 0;
}
我知道函数递归大概那意思 但又不是很懂,
这个题中主函数调用函数假设输入a,if条件成立,再次调用函数
假设输入b,if条件又成立,再次调用函数
假设输入\n就是回车 if条件不成立,然后呢?
下面2个句子reverse();
    printf("%c",a);
被if括起来了 不是都不走了么? 迷茫......
求指点......
搜索更多相关主题的帖子: 函数 递归 
2009-07-25 12:45
苦中求乐
Rank: 1
等 级:新手上路
帖 子:62
专家分:0
注 册:2007-10-27
收藏
得分:0 
你是结果不对还是不能运行呢?

笨鸟先飞。可惜我既笨又懒!
2009-07-25 13:05
文武两边随
Rank: 2
等 级:论坛游民
帖 子:40
专家分:39
注 册:2009-7-23
收藏
得分:0 
这函数的意思是 将你的输入逆向输出 程序可运行 但是程序流程我不是很懂
2009-07-25 13:24
ziyourufeng3
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2009-7-25
收藏
得分:0 
当a=='\n'时最后一层函数(a=='\n'所在那一层)返回,接着执行倒数第二层的printf("%c",a);然后倒数第二层函数返回,再执行倒数第三层的printf("%c",a);然后倒数第三层函数返回......
2009-07-25 14:43
soler_z
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:130
注 册:2009-7-17
收藏
得分:20 
譬如你输入“abc\n” 四个字符
输入'a',if条件成立,再次调用函数
假设输入'b',if条件又成立,再次调用函数
知道输入\n就是回车 if条件不成立,
不成立的话,会回到\n之前的a='c'的reverse()内执行下一语句
printf("%c",a);
把a='c'输出;
然后再往前走呗,到a='b',再把a的值 printf出来
……
'c'-->x=f(n)
'b'-->y=f(x)=f(f(n))
'a'-->z=f(y)=f(f(f(n)))
形象点的表示就是上面的用数学函数表示,必须先算出x,才能算y,再算z
2009-07-25 14:45
文武两边随
Rank: 2
等 级:论坛游民
帖 子:40
专家分:39
注 册:2009-7-23
收藏
得分:0 
稍微晓得一点点了......
2009-07-25 14:56
文武两边随
Rank: 2
等 级:论坛游民
帖 子:40
专家分:39
注 册:2009-7-23
收藏
得分:0 
它是自己动返回么 没return啊
2009-07-25 14:58
ziyourufeng3
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2009-7-25
收藏
得分:0 
没有return也能返回。return只是返回一个值,没有return也照样返回,只是没有值而已。
2009-07-25 15:39
soler_z
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:130
注 册:2009-7-17
收藏
得分:0 
^_^,今天碰到一个跟你一样的问题,但是用数组写出来有点问题,都有点搞不懂了。。。
程序代码:
#include <stdio.h>
#include <stdlib.h>

void print_char(char *s)
{
    int i;
    for(i=0;i<6;i++)
    {
        if(*(s+i)!='\0')
        {

                print_char(*(s+i));
                printf("%c ",*(s+i));

        }
    }
}


int main()
{
    char str[]="abcde";

    print_char(str);



    return 0;
}

说我的s超出范围。。。。
懂的来研究研究。。。
就是把输入的五个字符,反序打印出来。
哈哈,留作纪念吧,把递归写成这样。。。兄弟们莫笑! 。。。

[[it] 本帖最后由 soler_z 于 2009-7-28 23:24 编辑 [/it]]
2009-07-28 22:13
wxjeacen
Rank: 7Rank: 7Rank: 7
等 级:禁止访问
帖 子:1291
专家分:628
注 册:2009-3-22
收藏
得分:0 
递归写到你那个境界也算是牛b了。

程序代码:
#include<stdio.h>
void reverse(char s[]){
    if(s[0]=='\0')
        return ;
    else{
        reverse(&s[1]);
        printf("%c",s[0]);
        }
}
int main(void)
{
    char s[]="123456";
    reverse(s);
    return 0;
}

生命不熄,战斗不止.
2009-07-28 22:28
快速回复:函数递归的问题
数据加载中...
 
   



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

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