加个main()测试一下,就知道了:
程序代码:
#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);
}
int main(void)
{
digit(22,33);
getch();
}
输出为:2 2 0 2 2。
``````````````````````
下面试着来分析一下,如果是我的这个数值,也就 2
次递归:
---------------------------------------------------------------
1:void digit(long n,long m)
/* 此时,n=22,m=33 */
{
if(m>0)
/* 此时,m=33,当然满足条件,所以输出22%10,也就是2 */
printf("%2ld",n%10);
if(m>1) /* m=33,也满足条件,递归,数值发生了变化,n/10,m/10,因其是长整型,所以传递的数值为 2,3 */
digit(n/10,m/10);
printf("%2ld",n%10); /* 递归时,还没运行到这个语句,所以这个输出没应用 */
}
----------------------------------------------------------------------
2,
void digit(long n,long m) /* 此时,n=2,m=3 */
{
if(m>0)
/* 此时,m=3,当然满足条件,所以输出2%10,也就是2 */
printf("%2ld",n%10);
if(m>1) /* m=3,也满足条件,递归,数值发生了变化,n/10,m/10,因其是长整型,所以传递的数值为 0,0*/
digit(n/10,m/10);
printf("%2ld",n%10);/* 递归时,还没运行到这个语句,所以这个输出没应用 */
}
-------------------------------------------------------------------------------------
3,
void digit(long n,long m) /* 此时,n=0,m=0 */
{
if(m>0)
/* 此时,m=0,不满足条件,不执行这条语句 */
printf("%2ld",n%10);
if(m>1) /* m=0,不满足条件*/
digit(n/10,m/10);
printf("%2ld",n%10);/* 下面应用到这条语句了,输出 0%10,也就是输出 0 */
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
好了,现在输出 2 2 0 三个数了,由于采用的是递归方式,每次递归都向栈内压入一个数值,现在栈内有2,2两个数,通过最后一个printf出栈,所以最后屏幕上显示的是 2 2 0 2 2。如果把最后一条语句删除,就会在屏幕上输出 2 2两个数。
###############################################
由于C语言学得还欠火候,所以如果有解释不对的地方,还请大家批评指正。谢谢。