我有一本C书的递归函数如下:
void print(int a[], int n)
{ if (n<=0) return ;
printf("%d\n", a[0]);
print(&a[1], n-1);
}
Run Code Online (Sandbox Code Playgroud)
我运行了,这个函数打印指定数组的所有元素.但我真的不明白这个功能是如何工作的,所以我可以打印数组的所有元素.请问有人能给我一个明确的解释吗?
&a[1]是数组的第二个元素的地址,它实际上是第一个元素之后的数组部分的地址.所以在打印参数数组的第一个元素后,
print(&a[1], n-1);
Run Code Online (Sandbox Code Playgroud)
自己传递数组的剩余部分,也将长度减少一个.
例如,如果你调用print与阵列{1, 2, 3, 4, 5}和n == 5,事件和调用链如下:
{2, 3, 4, 5}和n == 4
{3, 4, 5}和n == 3
{4, 5}和n == 2
{5}和n == 1
{}和n == 0
n<=0 - >退货