急!!!!!!!谁能给我讲一下这个递归是怎么递归的???

来源:百度知道 编辑:UC知道 时间:2024/04/28 08:12:44
急!!!!!!!谁能给我讲一下这个递归是怎么递归的???要详细的过程
4.#include <stdio.h>
void digit(long n,long m)
{if(m>0)
printf("%2ld",n%10);
if(m>1)
digit(n/10,m/10);
printf("%2ld",n%10);
}
main()
{long x,x2;
5
printf("Input a number:\n"); scanf("%ld",&x);
x2=1;
while(x2<x) x2*=10;
x2/=10;
digit(x,x2);
printf("\n");
}
输入:9734526
输出:______________________________

应该是6254379
while(x2<x) x2*=10; x2/=2;
循环的作用是找到一个和输入位数相同的最小数
比如说输入12 则相应x2是10;输入123则相应x2是100;
函数调用的话每次在再次调用了函数之后才输出当前函数变量中的
个位,而每次被调用函数的变量都去了低位(digit(n/10,m/10); )
最后一次调用直接输出了,所以首先打印的一定是输入数的最高位。
所以整个函数是逆序输出的!~

首先说一下你倒数第6行的“5”是错误的吧?删除。

DIGIT函数就是实现了一个递归的调用如果M>1则变量N/10M/10之后重复DIGIT
直到M>0但M不大于1,此时递归结束

之后就是主函数啦~

经测试 去掉5之后程序可以运行