itoa函数 递推与递归思想

itoa函数作用是将整型数通过加’0’保存在字符数组中
递推情况下

#include<stdio.h>
void itoa(char s[] , int n){
     int i=0;
     int sign;
     
     if((sign=n)<0){
         n=-n;
         }
     s[i++]='\0';
     
     do{
       s[i++]=n%10+'0';
  
      } while(n/=10);//需要注意n是逆序排列在数组中的
      if(sign<0){
         s[i]='-';
      }
 
      for(int j=i;j>=0;j--){
          printf("%c",s[j]);
      }
} 

int main(){
 char s[1000];
 int n;
 scanf("%d",&n);
 itoa(s, n);
 return 0;
}

递归情况下:

#include<math.h>
void itoa(int n, char s[]){
     static int i=0;
     if(n/10){
        itoa(n/10,s);
     }
     else{
       i=0;
       if(n<0)
          s[i++]='-';
     }
     
     s[i++]=abs(n)%10+'0';
     s[i]='\0';
     }



在递归的程序中,把 i 设置为静态变量,保证在递归调用过程中,存储在内存空间中的 i 都是同一份。

在递推的程序中,由于求n%10+‘0’的顺序是从低位到高位,所以在输出字符数组时需要逆序输出。
而在递归程序中,调用的顺序是由内而外,最内层的数先被存入字符数组,所以将会从左至右的顺序计算出整数n的每一位数字。

在递归中,可以看到每次递归调用都将会写入是s[i]=’\0’,然而到了上一层递归调用时,’\0’就会被下一位数字覆盖掉,直到最外层的 ‘\0’ ,没有数字可以覆盖它了,字符数组结束。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值