|
发表于 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
|
|