回 帖 发 新 帖 刷新版面

主题:哪位大哥告诉我,这个递归顺序,想不出来!

刚开始学,所以一下想不出来,可以又非常想知道。谢谢各位了


 题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
[code=c]
# include <stdio.h> 

main ()

    int i = 5;
    
    void palin(int n);
    
    printf ("\40");
    
    palin(i);
    
    printf ("\n");
    
    getchar ();
    return 0;
}

void palin(int n)

{

    char next;
    
    if (n <= 1)
    {
        next = getchar ();
        printf ("哦哦  ");
        printf ("嘿嘿  ");
        putchar (next);
        printf ("哦哦  ");
    }
    else
    {
        next = getchar ();
        palin (n - 1);
        printf ("哈哈  ");
        putchar (next);
    }
}
[/code]

刚刚想出来一个推导,各位大哥看对不对,这里paling函数一共是调用了四次。我输入zxcvb,那么从开始的palin(n=1)的时候开始,是x,可是被被palin(5)调用了,最好zxcv被依次调用完了。这个时候palin(1)开始输出--哦哦  嘿嘿  b哦哦。下面是开始从palin(2)到palin(5)的输出---哈哈  v哈哈  c哈哈  x哈哈  z



运行结果为
 zxcvb
哦哦  嘿嘿  b哦哦  哈哈  v哈哈  c哈哈  x哈哈  z[em2][em2]

回复列表 (共2个回复)

沙发

建议lz看看栈的知识,如果和栈比较着看,比较容易懂得,递归调用到函数palin时可以看成 暂存 后面的操作,重新执行函数palin,等到满足 返回条件了,后面的操作才得以随着上一层palin的结束得以执行,其实按照 代码 执行过程来看,并不难,还是建议看看栈的概念 加强递归的理解。。

板凳

哦哦  嘿嘿  b哦哦  哈哈  v哈哈  c哈哈  x哈哈

我来回复

您尚未登录,请登录后再回复。点此登录或注册