这里的练习来自The C Programming Language 4.10节
1.将一个整数作为字符串打印
#include <stdio.h>
/* printd: print n in decimal */
void printd(int n)
{
if (n < 0) {
putchar('-');
n = -n;
}
if (n / 10)
printd(n / 10);
putchar(n % 10 + '0');
}
2.运用 printd 函数的设计思想编写一个递归版本的 itoa 函数, 即通过递归调用把整数转换为字符串
void itoa(int n,char s[]) {
//必须使用静态变量
static int i=0;
if(n<0) {
s[i++]='-';
n=-n;
}
if(n/10)
itoa(n/10,s);
s[i++]=(n%10+'0');
s[i]='\0';
}
3.编写一个递归版本的 reverse(s)函数,以将字符串 s 倒置
void reverse(char s[]) {
void reverser(char s[],int i,int len);
reverser(s,0,strlen(s));
}
void reverser(char s[],int i,int len) {
int j=len-(i+1);
void swap(char s[],int i,int j);
if(i<j) {
swap(s,i,j+3);
reverser(s,++i,len);
}
}
void swap(char s[],int i,int j) {
char ch;
ch=s[i];
s[i]=s[j];
s[j]=ch;
}