作业帮 > 综合 > 作业

#include int fun(int*x,int n) { if (n==0) return x[0]; else

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/06/02 12:41:34
#include int fun(int*x,int n) { if (n==0) return x[0]; else return x[0]+fun(x+1,n-1); }
void main()
{
int a[]={1,2,3,4,5,6,7};
printf("%d\n",fun(a,2) );
}
#include
int fun(int*x,int n)
{
if (n==0)
return x[0];
else
return x[0]+fun(x+1,n-1);
}
如果n = 0,那么返回 数组 x的第一个元素,如果 n !=0 那么后面将会是一个递归算法.
请把代码贴完,还有你想说明的是什么?想问什么?
再问: 这题怎么求解,能把整个过程写一下吗?递归算法,最后一步n==0时,返回值 x[0]的值是多少啊?
再答: 首先将数组 a 和 2 传入 fun() 将数组 a 的首地址赋给 指针x n 不等于0 所以 fun 返回 x[0]+fun(x+1, n-1) x[0]就是数组的第一个元素,即为:1 1+fun(x+1, n-1), 我们设此时的fun(x+1, n-1)值为 K; 现在我们需要计算 k 这里是第二次调用 fun函数,而且是在 fun函数自己里面调用的,这就叫递归。 因为将数组 a 的首地址赋给 指针x,所以 x+1指的就是数组中的第二个元素即 a[1],值为2,而此时的a[1]赋给指针x,那么a[1]相当于fun()参数x的x[0],这个问题一定要明白。 现在看 n-1 任然不为0 所以 返回x[0]+fun(x+1, n-1),我们设此时的fun(x+1, n-1)值为 j;现在我们计算j 这个时候传进来的数组起始地址是a[1],所以相对于传进来的参数而言,此时的x[0]相当于数组的a[1]。 所以返回为2+ fun(x+1,n-1) 我们发现这个时候 n-1等于0 了 返回x[0],而此时的 x[0]相当于 a数组中的 a[2]; 即j的值为3 现在回到第一步我们得到的是 1+k 而k=2+j 我们得到的j=3 那么: 1+ 2 +3 =6。就是我们最后的结果了。