标题:求大神,写下递归调用的步骤,即红色部分,尽量详细点
只看楼主
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
结帖率:75%
已结贴  问题点数:20 回复次数:10 
求大神,写下递归调用的步骤,即红色部分,尽量详细点
# include <stdio.h>

int fun(int m, int n)        //m个苹果 n个篮子
{
    int i, t = 0;
   
    if(n <= 1)
        return 1;
   
    for(i=m; i>=0; i-=n)
        t += fun(i, n-1);
   
    return t;
}

int main(void)
{
    int m, n;
   
    printf("请输入m个苹果 n个篮子:");
    scanf("%d %d", &m, &n);
   
    printf("放法:%d种!\n", fun(m, n));
   
    return 0;
}
搜索更多相关主题的帖子: include return 苹果 
2016-07-11 15:24
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:5 
递归就是自身调用自身啊, 类似于循环.

代码测试环境:  WinXP+C-Free5.0.
2016-07-11 17:50
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
得分:0 
fun(7, 3);时:
                i = 7时, t = fun(7, 2);
                i = 4时, t = fun(7, 2) + fun(4, 2);
                i = 1时, t = fun(7, 2) + fun(4, 2) + fun(1, 2);

                fun(7, 2);时:
                            i = 7时, t = fun(7, 1);
                            i = 5时, t = fun(7, 1) + fun(5, 1);
                            i = 3时, t = fun(7, 1) + fun(5, 1) + fun(3, 1);
                            i = 1时, t = fun(7, 1) + fun(5, 1) + fun(3, 1) + fun(1, 1);
                此时: t = 4; 即: fun(7, 2) = 4;

                fun(4, 2);时:
                            i = 4时, t = fun(4, 1);
                            i = 2时, t = fun(4, 1) + fun(2, 1);
                            i = 0时, t = fun(4, 1) + fun(2, 1) + fun(0, 1);
                此时: t = 3; 即: fun(4, 2) = 3;

                fun(1, 2);时:
                            i = 1时, t = fun(1, 1);
                此时: t = 1; 即: fun(1, 2) = 1;
   
    综上, t = 8; 即: fun(7, 3) = 8;

求正解
2016-07-11 19:36
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:5 
递归函数,只问结果,不问过程。
也就是说:很多时候你知道结果对,但是就是不知道过程是如何实现的。
2016-07-11 20:50
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
得分:0 
回复 4楼 linlulu001
那我想问下,以上我写的调用过程正确吗?!
2016-07-11 22:55
laosiji、
Rank: 2
等 级:论坛游民
帖 子:7
专家分:12
注 册:2016-6-30
得分:5 
都是错的。
2016-07-12 09:06
弟大勿勃
Rank: 2
等 级:论坛游民
帖 子:186
专家分:59
注 册:2014-4-17
得分:5 
得学汇编了
2016-07-12 09:42
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
你写的调用进程不对
程序算法也不对。
2016-07-12 09:59
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
得分:0 
回复 8楼 linlulu001
能指出来吗,好让我清楚哪有问题啊
2016-07-12 17:53
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:0 
我想的和你想的不一样,我认为蓝子不同,所以得出的结果就和你的不同,才说你错,现在看来,你的算法没有问题,是对的。
fun(7,3)=fun(7,2)+fun(4,2)+fun(1,2)
fun(7,2)=fun(7,1)+fun(5,1)+fun(3,1)+fun(1,1)  4种
fun(4,2)=fun(4,1)+fun(2,1)+fun(0,1)           3种
fun(1,2)=fun(1,1)                             1种
fun(7,3)=4+3+1=8。
你写的过程是对的,只是你的分析容易让人误解。

2016-07-12 22:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-466836-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.216825 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved