鱼C论坛

 找回密码
 立即注册
查看: 4388|回复: 7

谁能来帮忙看看这道递归题应该怎么理解??

[复制链接]
发表于 2013-8-22 14:50:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
死前想后,还是没能理解这道递归题。特此来论坛里求教

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i=5;  
  5.         void palin(int n);  
  6.         printf("Please input 5 character\40:");  
  7.         palin(i);  
  8.         printf("\n");
  9.         return(0);
  10. }  
  11.        
  12. void palin(int n)  
  13. {
  14.         char next;  
  15.         if(n<=1)  
  16.         {
  17.                 next=getchar();  //e
  18.                
  19.                 putchar(next); // e
  20.         }  
  21.         else  
  22.         {  
  23.                 next=getchar();  //abcde
  24.                 palin(n-1);  
  25.                 putchar(next);  
  26.         }
  27. }
复制代码


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2013-8-22 15:14:26 | 显示全部楼层
目测好像是把你输入的前五个字符倒着打印出来 是不是??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-22 16:11:59 | 显示全部楼层
本帖最后由 仰望天上的光 于 2013-8-22 16:32 编辑

void palin(int n);的功能是:从键盘读入n个字符并逆序打印

因此,可以这样处理:
a. 从键盘读入一个字符,存储到变量next;
b.从键盘读入n-1个字符并逆序打印
c.打印next
其中b就是递归调用。为了简便,我直接忽略了递归的终结条件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-22 16:36:46 | 显示全部楼层
:sad没什么!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-23 10:52:46 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-8-23 10:53:18 | 显示全部楼层
仰望天上的光 发表于 2013-8-22 16:11
void palin(int n);的功能是:从键盘读入n个字符并逆序打印

因此,可以这样处理:

逆序打印的具体实现应该怎么理解??
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-23 11:42:39 | 显示全部楼层
这个递归其实挺简单的,你单单这样看代码要是难以理解的话,最好是用笔画出他的执行过程,你就弄五个相同的函数,然后一个个的递归,这样会很清晰的,递归本来是挺抽象的,如果你看代码看不懂,那就画图,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-8-23 12:14:46 | 显示全部楼层
pcfate 发表于 2013-8-23 10:53
逆序打印的具体实现应该怎么理解??

如果理解费劲的话,就用简单的步骤去梳理,以你这里的例子:void palin(int n)  
对于调用palin(3),实际代码运行顺序如下:
1、
char next3;
next3=getchar();
palin(2);
putchar(next3);
2、继续转化上述中的palin(2)
char next3;
next3=getchar();
char  next2;    //palin(2)开始
next2=getchar();
palin(1);
putchar(next2); //palin(2)结束
putchar(next3);
3、继续转化啥归属paliln(1)
char next3;
next3=getchar();
{char  next2;                 //palin(2)开始
next2=getchar();
{char  next1;      //palin(1)开始
next1=getchar();
putchar(next1);  //palin(1)结束
}
putchar(next2);          //palin(2)结束
}
putchar(next3);
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-5 15:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表