帮忙解决下c语言递归调用问题

来源:百度知道 编辑:UC知道 时间:2024/05/21 11:01:29
#include <stdio.h>
int number,ndata,data[100],sum;
void solve(int s,int sign,int n)
{
int i;
for(i=s;i<ndata;i++){
sum+=sign*(number/n/data[i]);
solve(i+1,-sign,n*data[i]);
}
}
int main()
{
int i;
scanf("%d %d",&number,&ndata);
sum=0;
for(i=0;i<ndata;i++) scanf("%d",&(data[i]);
solve(0,1,1);
printf("%d\n",sum);
return 0;
}

输入:1000 3 5 13 11
输出:

帮忙说明一下这个题的解题思路,关键在函数的递归调用方面,说一下每一步调用步骤,谢谢了,这个地方我弄不懂,该怎么返回值,返回到哪里,帮忙了各位,谢谢了

void solve(int s,int sign,int n)
{
(1): int i;
(2): for(i=s;i<ndata;i++){
(3): sum+=sign*(number/n/data[i]);
(4): solve(i+1,-sign,n*data[i]);
}

一:第一次调用函数是在main()里的,solve(0,1,1)
分别s=0, sing=1, n=1;
二:在solve里开始循环,开始递归,执行第(4)步,slove(i+1,-sing,n*data[i])
分别s=i+1=0+1=1,-sign=-1,n*data[i];
然后依次类推;记住每次循环时sum的值在变;
三:最后循环完,因为没返回值,所以就执行main里的
"printf("%d\n",sum);"