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

8.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
网上一个网友的回复,我试过可运行,详见以下代码。以下代码我个人有三个疑问,请大家帮忙解答。
1)n为什么是1的时候,就代表获取的是最后一个字符呢?n和字符输入之间是通过什么联系起来的。
2)这里n<=1条件,不会出现死循环吗?n可以是0、-1……
3)这里char自动转换成int,为什么字符也可以转换成int?
#include
int main()
{
int n=5; //这里n是字母的个数,也可以通过键盘输入
reverse(n);
return 0;
}

void reverse(int n)
{
int next;
if(n<=1)
{
next=getchar();
putchar(next);
}
else
{
next=getchar();
reverse(n-1);
putchar(next);
}
}

可以看一下这个

img


是递归完了才逐个输出的

就是先递归,再输出即可
1)n为什么是1的时候,就代表获取的是最后一个字符呢?n和字符输入之间是通过什么联系起来的。
因为n是从5开始的,那么n表示输入字符的数量,5,4,3,2,1,所以到n=1时就可以结束输入了
2)这里n<=1条件,不会出现死循环吗?n可以是0、-1……
不会的。因为n<=1的条件处理中,没有调用递归函数啊,自然递归就结束啦
3)这里char自动转换成int,为什么字符也可以转换成int?
因为char本身也是ASCII码,char在表示字符的同时,也是一个字节,可以表示整数

1)n为什么是1的时候,就代表获取的是最后一个字符呢?n和字符输入之间是通过什么联系起来的。
答: n是输入字符的个数, 每输入一个字符n都会减1, 直到它变为1时代表这是输入的第n个字符了.
2)这里n<=1条件,不会出现死循环吗?n可以是0、-1……
答: 当满足n<=1条件时, 就不会再递归调用了, 所以不会出现n继续减1的情况.
3)这里char自动转换成int,为什么字符也可以转换成int?
答: c语言中char不是以字符串存储的, 其实就是ascii码, 它和int是一回事.

首先你得了解函数递归,函数递归存在两个必要条件,①存在限制条件,当条件不满足的时候,递归函数会结束。②每次函数递归都要逼近这个条件。函数递归,分开理解先递进,后回归。只有当函数递进到限制条件不满足的时候,函数才会回归。你可以看我这张图去理解。红色的线是递进,橙色的线是回归。它能实现逆序打印的原因很简单,是在回归的时候才执行putchar()。在递进过程中它没有执行到putchar,就先去进行函数递进了。在回归的时候有个特点,从哪里来回那里去。

img

前两个问题需要你自己结合图片,以及我说的话去理解。
至于你问的第三个问题。
你了解过getchar()吗?getchar的作用是接收字符。也就是说你在键盘上输入的12345本质是字符的12345而不是int类型12345。这并不是转化的问题,因为它本身就是字符。