递归方法虽然写起来简单,但递归公式的寻找可比想到首尾递进互换的方法难太多了,想了很长时间才想出来,初学小菜鸡,在这里回顾一下解题思路。
动态数组的实现:使用malloc函数申请初始大小为N的一片堆空间,使用getchar函数循环读取标准输入缓冲区的字符并存入申请的空间中,当空间被占满时使用realloc函数扩容然后继续读取并写入,遇到换行符时停止读取,在最后一个字符后追加‘\0‘并退出循环。
链表的实现:使用单向链表即可,使用getchar循环读取标准输入缓冲区的字符并使用尾插法建立链表,表尾元素的pNext指针指向NULL。
递归公式的推导:字符串存储下来之后,经过观察,如果要将n个字符反转输出,需要先将后n-1个字符整体反转输出然后输出第1个字符,同理,要将后n-1个字符反转输出,需要先将其后n-2个字符反转输出然后输出第2个字符,以此类推直到反转最后一个字符时将最后一个字符直接打印输出即可结束递归,函数逐层退栈连环打印实现反转输出。
以“ABCDE”为例,定义一个reverse()函数,递归公式可表示为reverse("ABCDE") = reverse("BCDE") + 'A' = reverse("CDE") + 'B' + 'A' = reverse("DE") + 'C' + 'B' + 'A' = reverse('E') + 'D' + 'C' +