今天照例分享一道经典的入门题目,相信大家一定很熟悉这道题目,经典的做法是将字符型数据存入一个数组,然后从最后一个个字符打印出来。可是为了之后的讲解,我们需要训练好写递归算法的能力,所以,这道题我们需要用递归写出。
(假设输入为 abcdefg
输出则是: gfedcba)
题目解法:
大家思考一下,递归的两大要素是什么? 上节讲过递归的两大要素是递归的停止条件和规律。假设这道题的停止条件是读入换行符。我们再看规律(越早输入的数据越晚输出)
具体代码:
#include<stdio.h>
void fun(void)//不需要任何返回值和参数。
{
char c;
scanf("%c", &c);//为在这一级打印的字符赋值。
if (c == '\n')
return;//停止条件,如果c为换行符,则停止递归。
fun();//进入下一级
printf("%c", c);//等下一级函数return后,打印c。
return;//来到了递归的最深层则要返回上一级。
}
int main(void)
{
fun();
return 0;
}
如下图:第一行是输入,第二行是输出。
总结:
递归的二要素:停止条件,规律
进入下一级函数前要进行判断,是否满足递归条件。
本节内容用到了栈的概念,即先进后出。