两段代码,其中有细微的区别。
1、
#include<stdio.h>
//k!
int my_pow(int n,int k)
{
printf("level %d: k loacation %p\n", k, &k);
if(k>0)
return my_pow(n,k-1)*k;
printf("level %d: k loacation %p\n", k, &k);
return 2;
}
int main(void)
{
int ret = my_pow(5,4);
printf("%d\n",ret);
return 0;
}
2、
#include<stdio.h>
//
int my_pow(int n,int k)
{
printf("level %d: k loacation %p\n", k, &k);
if(k>0)
my_pow(n,k-1)*k;
printf("level %d: k loacation %p\n", k, &k);
return 2;
}
int main(void)
{
int ret = my_pow(5,4);
printf("%d\n",ret);
return 0;
}
按照我个人的理解,第一段代码不能算是递归,只是调用,k>0时,my_pow(n,k-1)k返回到主函数中,当k=0时,执行return 2;ret =2(k-3)(k-2)(k-1)*(k)=48.
第二段代码,k>0时,继续调用my_pow( )函数,只是将k替换成k-1,一层层深入,直到k = 0,结束if语句。k = 0时再一层层退出,直到k = 4.
第二段代码(递归)中,执行if语句时,my_pow( )函数后面的代码不执行,当k值增大再从my_pow( )函数后面的代码开始执行。
第一段代码(if函数有return)中,if语句有多行代码,return后面的代码总是不执行。
可以用单步调试观测运行状态。