题目描述:用递归技术实现将输入的小于32768的非负整数逆序输出。如输入123,则输出321。
分析:尽管本题要处理的是“数”,但我们可以按照非数值问题进行分析,并建立相应的递归算法。第一步,先将问题进行简化。假设要输出的正整数只有一位,则该问题就简化为“逆序”输出一位正整数。对一位正整数实际上无所谓逆序不逆序,问题实际上简化为输出一位整数。
第二步,对于一个大于10 的数,在逻辑上可以将它分为两部分:个位上的数和个位以前的数全部数字。
第三步,将个位以前的全部数字看成一个整体,则为了逆序输出这个大于10 的正整数,可以按一下步骤进行操作:
1. 输出个位上的数字;
2. 逆序输出个位以前的全部数字。
这就是将原来的问题分解后,用较小的问题来解决原来大问题的算法。其中操作2中的问题“逆序输出个位以前的全部数字”只是对原问题在规模上进行了缩小。这样描述的操作步骤实际上就是一个递归的操作步骤。
整理上述分析结果,把第一步化简问题的条件作为递归结束条件,将第三步分析得到的算法作为递归算法,可以写出如下完整的递归算法描述。
若 要输出的整数只有一位
则 输出该整数
否则 输出整数的个位数字,逆序输出除个位以外的全部数字。
结束。
注意:本题中的分析思路具有广泛的适用性,可以有效地针对一般的非数值问题找到简单的递归算法。
#include <stdio.h>
void reverse(int m);
main()
{
int n=321;
reverse(n);
printf("\n");
getch();
}
void reverse(int m)
{
printf("%d",m%10); /*输出个位上数字*/
if((m/10)!=0) /*如果剩余数字不为0则继续输出剩余的*/
reverse(m/10);
}
From: http://syixinsyx.blog.163.com/blog/static/311822072008113104536489/