|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面这段程序中的递归函数是怎样执行的?求详解
#include <stdio.h>
void f(int x[], int n)
{
if (n > 1)
{
f(&x[1], n-1);
printf("%d", x[0]);
}
else
printf("%d", x[0]);
}
int main()
{
int z[6] = {1, 2, 3, 4, 5, 6};
f(z, 6);
printf("\n");
return 0;
}
在这里,递归函数的第一个参数你可以看做传入的是数组,或者是一个可变长度的参数;
第一步传入的f(z, 6), 其中z是数组名即相当于f(&z[0], 6);
第二步进入函数6 > 1, 即即进行f(&z[1], 5), 在这里你可以看做此处传入了将原始z数组去掉第一个元素,以z[1]开头的数组;
依次进行到f(&z[1], 1)时, 打印数组的首个元素;
我大致列一下过程,希望你能明白:
第一步传入数组为1, 2, 3, 4, 5, 6;
第二步为2, 3, 4, 5, 6;
第三步为3, 4, 5, 6;
第四步为4, 5, 6;
第五步为5, 6;
第六步为6;
然后倒序打印(即递归)上面数组的首元素:
打印6;
打印5;
打印4;
打印3;
打印2;
打印1;
|
|