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

2025-03-11 11:35:11
推荐回答(4个)
回答1:

首先这个代码有问题,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

回答2:

#include
void
pt(char
*p){
if(*p!='\0'){
pt(p+1);
//先不打印,指针指向下个字符,直到最后一个字符
printf("%c",*p);//打印最后一个字符的前一个字符、的前一个字符、的前一个字符。。。
}
else
return
;//到最后一个字符,返回进行打印
}
int
main(){
char
str[50];
gets(str);
pt(str);
printf("\n");
return
0;
}

回答3:

#include "stdio.h"
void c(int j,char *b);
void main()
{
char a[5];
int j=5;

for(int i=0;i<5;i++)
{
scanf("%c",&a[i]);
}
c(j,a);
printf("\n");

}
void c(int j,char *b)
{
if(j==1)
printf("%c",b[0]);
else
{
printf("%c",b[j-1]);
c(j-1,b);
}
}

回答4:

仅供参考:

#include "stdio.h"

void c(int, char *);

void main()
{
char a[5];
int i;

for(i=0;i<5;i++)
scanf("%c",&a[i]);

c(5, a);
}

void c(int j, char *b){
if(j!=0){
printf("%c",b[j-1]);
c(j-1, b);
}
}