C语言,题目:利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。 怎么做啊

如题所述

首先这个代码有问题,void palin(n)应为void palin(int n)后面的int n;不要了,否则不能编译通过。
分析流程很简单:
假定输入34567
首先n=5;next=getchar()=3;
palin(n-1=4);next=getchar()=4(注意关键的地方,这个next和上一个next是不一样的,上一个next被压栈保护;)
……
palin(1);next=getchar()=7;(压栈完成,下面进行出栈)
putchar(next=7);7被pop出来;
……

弄清楚递归,一定要搞明白栈(first in last out)的结构,递归就是依赖栈运行的。在运行下一个递归函数前将上一个递归函数压栈,这个递归函数运行完成后,继续运行上一个递归函数;

这个递归如果拆开来写如下:
1. getchar() 输入3
2. getchar()输入4(上一个getchar()及得到的3被压栈)
3. getchar()……5
4. getchar()……6
5. getchar()……7
5. putchar() 输出7
4. putchar() 输出6
3. putchar() ………5
2. putchar()……4
1. putchar()……3
按照1234554321的次序,标号相同的语句是同一个函数的语句,正所谓first in last out 首先被执行getchar的最后被执行putchar
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-06-14
#include <stdio.h>

char str[20];

int Reverse(int order)
{
if(order==5) return 0;
else
{
Reverse(order+1);
putchar(str[order]);
return 1;
}
}
int main()
{
gets(str);
Reverse(0);
return 0;
}
第2个回答  2012-06-14
#include<iostream>
using namespace std;

int work(int n)
{
char a;
cin.get(a);
if( n==5 )
{
cout<<a;
}
else
{
work(n+1);
cout<<a;
}
return 0;
}

int main()
{
work(1);
cout<<endl;
return 0;
}追问

可以备注 一下吗 我是初学的 好多都看不懂

本回答被提问者和网友采纳
相似回答