用递归方式实现将一个非负整数逆序输出

题目描述:用递归技术实现将输入的小于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/

点赞