| 
 | 
 
 
发表于 2019-2-15 20:40:41
|
显示全部楼层
 
 
 
 本帖最后由 jackz007 于 2019-2-15 20:56 编辑  
 
      把递归函数 f(const int x[] , const int n) 中的数组 x[] 改成指针也许比较容易说明问题: 
- #include <stdio.h>
 
  
- void f(const int * x , const int n)
 
 - {
 
 -         if(n > 1) {
 
 -                 f(x + 1 , n - 1)    ;
 
 -                 printf(" %d" , * x) ;
 
 -         } else {
 
 -                 printf("%d" , * x)  ;
 
 -         }
 
 - }
 
  
- main(void)
 
 - {
 
 -         int z[6] = {1 , 2 , 3 , 4 , 5 , 6} ;
 
 -         f(z , 6)                           ;
 
 -         printf("\n")                       ;
 
 - }
 
 
  复制代码 
 
        函数 f() 每次递归调用传进去的参数都有变化,其中,x 会指向后一个元素,n 会减 1,直到 n = 1 终止递归。 
 
        第 1 次调用 x[0] = 1 , n = 6  - 继续递归 
        第 2 次调用 x[0] = 2 , n = 5  - 继续递归 
        第 3 次调用 x[0] = 3 , n = 4  - 继续递归 
        第 4 次调用 x[0] = 4 , n = 3  - 继续递归 
        第 5 次调用 x[0] = 5 , n = 2  - 继续递归 
        第 6 次调用 x[0] = 6 , n = 1  - 终止递归 
 
        n = 1 终止递归,首先输出数组 x[] 的第 6 个元素 6,然后递归函数继续按照 n = 2、3、4、5、6 的顺序依次逐级返回,于是,又先后陆续输出后面的 5、4、3、2、1 
 |   
 
 
 
 |