当看书上讲用递归的算发的时候,怎么都理解不了里面是怎么运算的,运用GDB 调试的时候也是百思不得其解释,最后终经老师一句话点拨开,才明白是怎么回事。其实就记住一点:递归不是循环!!!
有如下一段代码:
#include<stdio.h>
void fun(int i){
if(i>0){
fun(i/2);
}
printf("%d\n",i);
}
int main(int argc,char *argv[]){
fun(10);
return 0;
}
最开始当我看到这样一段代码的时候,以为运行的结果会是:0。但结果却出忽我的意料,居然是0 1 2 5 10(如下:)
按照之前的逻辑思维,回认为i在里面会一直循环进行(i/2)的运算,直到(1/2==0)这个时候退出,然后打印出“0”,但实际GDB调试的结果确是当除完后会再循环输出,如下: