有趣的递归调用——
问题描述:编写递归函数,把正整数的各位数字依次打印输出
输入:任意一个正整数
输出:从高位开始依次输出正整数的各位数字,每位数占用一行。
样例2: 输入 13
输出1
3
一:
#include<stdio.h>
int a[100],i=0;
void input(int n){
int r=n%10;
if(n>0){
a[i++]=r;
input(n/10);
}
else i--;
}
void out(){
printf(" i=%d a[i]=%d ",i,a[i]);
if(i>0){
printf("%d\n",a[i--]);
out();
}
if(i==0)printf("%d",a[i]);
}
int main(void){
int n;
scanf("%d",&n);
input(n);
out();
return 0;
}
二
1)
#include<stdio.h>
int a[100],i=0;
void input(int n){
int r=n%10;
if(n>0){
a[i++]=r;
input(n/10);
}
else i--;
}
void out(){
printf(" i=%d a[i]=%d ",i,a[i]);
if(i>0){
i--; //改动之处
printf("\n"); //
// printf("%d\n",a[i--]); //
out();
}
if(i==0)printf("%d",a[i]);
}
int main(void){
int n;
scanf("%d",&n);
input(n);
out();
return 0;
}
2)
正解
#include<stdio.h>
int a[100],i=0;
void input(int n){
int r=n%10;
if(n>0){
a[i++]=r;
input(n/10);
}
else i--;
}
int out(){ //改动之处
printf(" i=%d a[i]=%d ",i,a[i]);
if(i>0){
printf("%d\n",a[i--]);
return out(); //改动之处
}
if(i==0) printf("%d",a[i]);
}
int main(void){
int n;
scanf("%d",&n);
input(n);
out();
return 0;
}
三
输出不用递归的正解
#include<stdio.h>
int a[100],i=0;
void input(int n){
int r=n%10;
if(n>0){
a[i++]=r;
input(n/10);
}
}
void out(){
for(int k=i-1;k>=0;k--){
printf("%d",a[k]);
if(k>0)printf("\n");
}
}
int main(void){
int n;
scanf("%d",&n);
input(n);
out();
return 0;
}