递归的基本原理

  1. #include<stdio.h>  
  2. void upAndDown(int n);  
  3.  
  4. int main(void){  
  5.     upAndDown(1);  
  6.     return 0;  
  7. }  
  8. void upAndDown(int n){//每一级的递归调用都有自己的n,地址是不一样的  
  9.     printf("LevelOne %d :n location %p\n",n,&n);//位于递归调用前的语句具有相同的执行顺序  
  10.     if(n<4){  
  11.         upAndDown(n+1);  
  12.     }  
  13.     printf("LevelTwo %d :n location %p\n",n,&n);//位于递归调用后的语句具有相反的执行顺序,解决反向编程问题很好用!  

递归的和循环有时候可以相互代替,循环更快更节省空间,递归更好理解。

  1. #include<stdio.h>  
  2. long loop(int n);  
  3. long fact(int n);  
  4.  
  5. int main(void){  
  6.     int num;  
  7.       
  8.     printf("Enter the num,'q' to quit:\n");  
  9.     while(scanf("%d",&num) == 1){  
  10.         if(num < 0 || num > 13){  
  11.             printf("try again!\n");  
  12.             break;  
  13.         }  
  14.         else{  
  15.             printf("%dloop\n",loop(num));  
  16.             printf("%dfact\n",fact(num));  
  17.         }  
  18.     }  
  19.     printf("Bye\n");  
  20.     return 0;  
  21. }  
  22.  
  23. long loop(int n){  
  24.     long ans;  
  25.  
  26.     for(ans=1;n>1;n--)//不用再分情况讨论了!  
  27.         ans *= n;  
  28.     return ans;  
  29. }     
  30.  
  31. long fact(int n){  
  32.     long ans;  
  33.  
  34.     if(n>0)//从高往低乘!  
  35.         ans = n * fact(n-1);  
  36.     else 
  37.         ans = 1;  
  38.     return ans;  

使用递归的反向计算

  1. #include<stdio.h>  
  2. void to_binary(int num);  
  3.  
  4. int main(void){  
  5.     int num;  
  6.     printf("Enter a num:\n");  
  7.     while(1 == scanf("%d",&num)){  
  8.         to_binary(num);  
  9.         printf("Enter a num:\n");  
  10.     }  
  11.     printf("Bye\n");  
  12.       
  13.     return 0;  
  14. }  
  15. void to_binary(int num){  
  16.     int result;  
  17.  
  18.     if(num != 0){  
  19.         result = num % 2;//保存余数  
  20.         to_binary(num / 2);  
  21.         printf("%d",result);//我们需要先打印最后计算出来的结果,所以应该把这句话放在递归调用的后面  
  22.     }