C语言问题,请大神帮忙!俺是菜鸟!结果是怎么出来的?谢谢,好人一生平安!

#include <stdio.h>

int solve(int n, int m)
{
int i, sum;

if (m == 1)
return 1;
sum = 0;
for (i = 1; i < n; i++)
sum += solve(i, m - 1);
return sum;
}

int main()
{
int n, m;

scanf("%d %d", &n, &m);
printf("%d\n", solve(n, m));
return 0;
}

输入:7 4
输出:___20
20是怎么出来的!谢谢

算法是这样的,(7,4)=(1,3)+(2,3)+(3,3)+(4,3)+(5,3)+(6,3)
当m=1时返回值为1.那么继续拆开,(6,3)=(1,2)+(2,2)+(3,2)+(4,2)+(5,2)。(5,2)=(1,1)+(2,1)+(3,1)+(4,1)=1+1+1+1=4.那么6.3=0+1+2+3+4=10.(7,4)=10+6+3+1=20
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-28
#include <stdio.h>

int solve(int n, int m)/*调用时n=7,m=4*/
{
int i, sum;

if (m == 1)
return 1;
sum = 0;
for (i = 1; i < n; i++)
sum += solve(i, m - 1);
return sum;/*sum=1+1+3+4+5+6*/
}

int main()
{
int n, m;

scanf("%d %d", &n, &m);/*输入n和m的值*/
printf("%d\n", solve(n, m)); /*输出solve函数的返回值*/
return 0;
}本回答被提问者采纳