初探递归算法

 
#include <stdio.h>
#include <string.h>
#include <ctype.h>

main()
{
   void printd(int n);
   int x = -3275;
   printd(x);
   printf("\n");
}

void printd(int n)
{
  if( n < 0)
  {
    putchar('-');
	n = -n;
  }
  if(n / 10)
  /*利用递归代替了n /= 10这一步*/
  printd(n / 10);
  /*在这一步要深刻体会递归的原理,代码的执行步骤如下:
    当n / 10 != 0时,递归执行printd(n / 10),这是一个潜在的循环过程,n /= 10
	直到n = 3(此时是最高位的3)时,n / 10 = 0, 才退出递归循环,执行下面的语句:putchar(n % 10 + '0');*/	
  putchar(n % 10 + '0');
  /*关键的地方就是,在执行上面的语句putchar(n % 10 + '0')时,又是一个递归回退执行的过程。
    当n = 3时,已经是到了递归“终点”,这时,调用printd时,首先打印3(3 % 10 = 3),然后再
	“返回”到上一次调用,也就是n=32时候,打印2(32 % 10 =2),依次一层一层回退,一层一层打印
	输出,直到返回到n=3275时候的第一次调用,打印5,随之结束函数的执行 */
  /*从理解上来看,递归算法的执行过程就是 从一个维护处理值的“堆栈”中存取数据的过程
    比较浪费存储器的开销,所以效率较低,但是代码紧凑,易于编写与理解*/
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值