递归

#include<iostream>
using namespace std;
void PrintfNumber(char num[])
{
bool isBegin0 = true;
int nlength = strlen(num);
for (int i = 0; i < nlength; ++i)
{
if (isBegin0&&num[i] != '0')
{
isBegin0 = false;
}
if (!isBegin0)
{
cout << num[i];
}
}
}
void PrintToMaxDigits2(char *num, int length, int index)
{
if (index == length - 1)
{
PrintfNumber(num);
return;
}
for (int i = 0; i < 10; i++)
{
num[index + 1] = i + '0';
PrintToMaxDigits2(num, length, index + 1);//
}
}
void PrintToMaxofDigits(int n)
{
if (n <= 0)
{
return;
}
char *num = new char[n + 1];
num[n] = '\0';
for (int i = 0; i < 10; i++)
{
num[0] = i + '0';
PrintToMaxDigits2(num, n, 0);
}
}
int main()
{
int n;
cin >> n;
PrintToMaxofDigits(n);
system("pause");
}

详解

//以n等于3为例
void PrintToMaxDigits2(char *num, int length, int index)
{
if (index == length - 1)
{
PrintfNumber(num);
return;
}
for (int i = 0; i < 10; i++)
{
num[index + 1] = i + '0';
PrintToMaxDigits2(num, length, index + 1);//
/*
index=1;
for (int i = 0; i < 10; i++)
{
num[index + 1] = i + '0';
PrintToMaxDigits2(num, 3, index + 1);
if (index == length - 1)
{
//打印了1-9,这时num[1]还是1,当num[1]是2时再打印1-9
PrintfNumber(num);

return;
}

}

*/
}
}