| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1107 人关注过本帖
标题:求这个函到底地是什么意思。。。。。
只看楼主 加入收藏
狮子。
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:64
专家分:58
注 册:2010-8-1
结帖率:88.89%
收藏
已结贴  问题点数:20 回复次数:5 
求这个函到底地是什么意思。。。。。
程序代码:
void palin(int n)
{
    char next;
    if(n<1)
    {
        printf("\n\0:");
    }
    else
    {
        next=getchar();
        palin(n-1);
        putchar(next);
    }

}

以我的理解是:比如输入的n=3,执行else,比如输入ABC,再次调用palin函数,然后呢,putchar到底是怎么输出next的呢?
麻烦希望大侠们一步一步讲的清楚细节一点,3q~
搜索更多相关主题的帖子: next 
2010-08-10 11:55
erikyo
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:270
专家分:1154
注 册:2010-6-10
收藏
得分:6 
当n是3的时候,进入else语句,读入A到next中,然后递归调用plain(2),
plain(2)里进入的也是else语句,那么plain(2)里面的next存放读入的B,
再调用plain(1),这时候还是执行else语句,里面的局部变量next存放读入的C,
再调用plain(0),这时候执行if语句,打印换行。
然后返回到plain中,打印C,
再返回plain(2)中打印B,
最后返回到plain(3)中打印A
结束了。输出的就是CBA
2010-08-10 12:03
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:1 
递归函数。。

输入N个字符。。

然后将字符倒序输出。。

N<1就输出\n\0:



女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2010-08-10 12:08
不归鹄
Rank: 9Rank: 9Rank: 9
来 自:冥王星
等 级:蜘蛛侠
威 望:4
帖 子:491
专家分:1380
注 册:2009-12-20
收藏
得分:10 
反向输出你输入的字符串。

要理解递归,我觉得最好先理解堆栈,然后搞懂函数调用时的堆栈过程。

首先不说递归,看看两层的函数调用时怎样实现的。作为例子,用个数学运算的程序演示:输出一个数的平方的两倍。
程序代码:
/*输出一个数的两倍*/
#include<stdio.h>

int fun1(int x);/*此函数计算平方的两倍*/
int fun2(int y);/*此函数计算平方*/

int main()
{
    int n=3;
   
    printf("n=%d\n",fun1(n));
    system("pause");
   
    return 0;
}

int fun1(int x)
{
    x=2*fun2(x);
   
    return x;
}

int fun2(int y)
{
    y=y*y; 

    return y;
}


主函数调用fun1()函数,但fun1()函数无法完成所以fun1()函数继续调用fun2()函数。

在调用过程中,系统要为每个调用的函数开辟内存空间,结束后释放内存空间。

首先是fun1(),fun1()需要的是一个整形变量的空间,即x的空间,但fun1()没能就此返回函数值,因为自己没完成,它继续调用fun2(),于是系统又为fun2()开辟了一个整形变量的空间。fun2()直接执行完返回函数值(它没有调用函数了),系统收回它占据的空间,然后fun1()也返回函数值,系统收回它的空间。

这就像堆栈一样,先入栈,然后出栈。遵循先进后出的原则。

递归也如此,只不过函数是一直调用自身罢了,每调用一次,就得开辟一次空间。直至某个使他无法继续的条件成立为止,如果没有使他停止的条件设置,那就是无限递归了,和死循环一样。

你的程序中palin()函数每次调用时,如果n不小于0,便读入一个字符,读入字符后,它先是在调用自已,如果n还是没有小于0,就继续读入字符,所以并没有输出,直到最后n小于0,函数便返回了,由于没有返回值,它其实就是回到调用者的下一个步骤,于是先是倒数第二个执行putchar(),然后是倒数第三个执行putchar()……直到第一个,所以先读入的字符后输出,后读入的字符先输出,便是反向输出!

你可以每次只输入一个字符试试,看看每一次函数调用如何执行。不过这样的话你就要把getchar()换成scanf()了,因为getchar()会读入回车键。

2010-08-10 12:55
promising
Rank: 3Rank: 3
来 自:上海
等 级:论坛游侠
帖 子:87
专家分:147
注 册:2009-8-31
收藏
得分:3 
递归方法,这是在递推时赋值,回归时输出(最后输入的,最先输出~)
程序代码:
    if(n<1)
    {
        printf("\n\0:");
    }
    else
    {
        next=getchar();
        putchar(next);/////
        palin(n-1);//////
           }



若是这样的话,是在递推时输入及输出~(先输入的,先输出~)

向前走着……
2010-08-10 13:10
狮子。
Rank: 2
来 自:湖北
等 级:论坛游民
帖 子:64
专家分:58
注 册:2010-8-1
收藏
得分:0 
谢谢大家,讲的都非常清楚~

当你小有成绩,打算沾沾自喜时。不知道有多少比你强的人正在埋头奋进!
2010-08-11 10:04
快速回复:求这个函到底地是什么意思。。。。。
数据加载中...
 
   



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

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