根據妳題意(C語言編寫):
1,要使用遞歸函數。
2,遞歸層數對應數學位數。
我這裏自定義函數int checkNum(int num,int w)就是妳要的類型。
其功能是判斷數字num是否是w位數的數字,是返回1,否返回0。
w控制遞歸的層數。按照位數輸出1到n的整數。
#include <stdio.h>
int checkNum(int num,int w);//利用遞歸判斷數字num是否是w位的數
int getW(int num);//獲取數字的位數
int main()
{
int i,n,flag,num=1,mW=0;//mW:1到n的最大數位數
printf("輸入壹個數n:");
scanf("%d",&n);
mW=getW(n);
printf("1到%d的整數為:\n",n);
for(i=1;i<=mW;i++)//從1位數壹直到mW位數依次輸出
{
printf("------%d位數-------\n",i);
while(1)
{
if(num>n)
break;
if((flag=checkNum(num,i)))
printf("%d\n",num);
if(!flag)
break;
num++;
}
if(num>n)
break;
}
return 1;
}
int getW(int num)//獲取數字的位數
{
int n=1;
while(1)
{
num=num/10;
if(num==0)
return n;
n++;
}
return 1;
}
int checkNum(int num,int w)//利用遞歸判斷數字num是否是w位的數
{
num=num/10;
if(--w && num>0)
return checkNum(num,w);
if(w==0 && num==0)
return 1;
if(w==0 && num>0)
return 0;
return 0;
}