递归思想分析----以一个简单的例子为例

 

递归算法分析----以一个最简单的例子为例

题目:用递归的方法将整数按高到低位输出相应的数字字符.例如,对整数603,将输出3个数字6,0,3

源程序:

#include<stdio.h>

int main(void)

{

      void fun(int);

      int n;

      scanf("%d",&n);

      if(n<0)

      {

           putchar('-');

           n=-n;

      }

      fun(n);

      return 0;

}

void fun(int k)

{

      int a;

      a=k/10;

      if(a!=0)

           fun(a);

      putchar(k%10+’0’);

      printf(",");

}

 

分析:

咱们以这个例子来解释递归。递归就是自己调用自己的意思,在void fun(int k)函数中,有一句是fun(a); 这就是用到了递归。

现在以输入603为例:

输入603后,k=603, 进到void fun(int 603)这个函数:

int a;

      a=603/10=60;

      if(60!=0)

           fun(a);                                (1)

      putchar(603%10+’0’);

      printf(",");

 

句子(1)中60不等于0这个是成立的,所以要执行fun(a),也就是fun(60)这个函数,所以fun(60)又是一个完整的函数:

int a;

      a=60/10=6;

      if(6!=0)

           fun(a);                                (2)

      putchar(60%10+’0’);

      printf(",");

句子(2)中6不等于0也是成立的,所以要执行fun(a),也就是fun(6)这个函数,所以fun(6)也是一个完整的函数:

int a;

      a=6/10=0;

      if(0!=0)

           fun(0);                                (3)

      putchar(6%10+’0’);

      printf(",");

句子(3)中0不等于0这个是不成立的,所以fun(0)这个函数不被执行,递归就结束了。

 

所以整个void fun(int k)函数展开来就是:

void fun(int 603)

{

      int a;

      a=603/1060;

      if(60!=0)

      {

           int a;

           a=60/10=6;

           if(6!=0)

           {

                 int a;

                 a=6/10=0;

                 if(0!=0)

                      fun(0);                         (3)  //条件不成立,递归结束                            

                 putchar(6%10+'0');   //输出'6'

                 printf(",");

           }

            putchar(60%10+'0');      //输出'0'

           printf(",");

      }         

      putchar(603%10+'0');         //输出'3'

      printf(",");

}

 

红色代码部分就是上面的句子(2)的完整内容,红色代码加上蓝色代码之和就是句子(1)展开的完整内容。

整个程序顺序执行下来,先输出6,再输出0,最后输出3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值