标题:请教:这程序是如何运行的,能详细说明一下吗。
只看楼主
love04520
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2017-6-25
结帖率:66.67%
已结贴  问题点数:20 回复次数:7 
请教:这程序是如何运行的,能详细说明一下吗。
#include <stdio.h>
int ans , n , m , K;
char s[20];
int Max(int a,int b){
    return a > b ? a : b;
}
int Min(int a,int b){
    return a < b ? a : b;
}

void dfs(int c,int gt,int num1,int num2){
    if(c == n){
        ans = Max(ans , Max(num1,num2) - Min(num1,num2));
        return ;
    }
    if(gt != m)
dfs(c + 1 , gt + 1, num1 * K + s[c] - '0' , num2);
    if(c - gt != n - m)
        dfs(c + 1 , gt , num1 , num2 * K + s[c] - '0');
}

int main(){
    scanf("%d%d%d%s",&n,&m,&K,s);
    ans = -1;
    dfs(0 , 0 , 0 , 0);
    printf("%d\n",ans);
    return 0;
}
输入: 5 3 10 13254



[此贴子已经被作者于2017-6-28 10:40编辑过]

搜索更多相关主题的帖子: 运行 int Max return Min 
2017-06-28 10:24
love04520
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2017-6-25
得分:0 
dfs(0,0,0,0)带到自定义函数后,后面第一个IF语句都满足变成dfs(1,1,1,0),第二个IF语句也满足:dfs(1,0,0,1),继续带到dfs函数后,
dfs(1,1,1,0)第一个IF语句不满足,第二个IF语句后,变成dfs(2,2,13,0)经过第三个IF语句后为,dfs(2,1,1,3)
,,,,要怎么计算出最后ans值比较简单啊。求解,谢谢了
红色那段代码的详细运行情况:搞不懂。

[此贴子已经被作者于2017-6-28 10:42编辑过]

2017-06-28 10:34
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:7 
递归这东西 理解就是理解了 不理解就是不理解  想从头跟到尾 是很有难度滴

DO IT YOURSELF !
2017-06-28 14:44
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:7 
要理解递归,首先要理解递归。

对编程而言,递归简单来说就是函数自调用。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-28 18:28
love04520
Rank: 1
等 级:新手上路
帖 子:16
专家分:5
注 册:2017-6-25
得分:0 
回复 4楼 renkejun1942
如何,要你来做这题,你会怎么做,就阅读这段程序,得出答案。不要借助软件。
2017-06-29 10:42
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:0 
回复 5楼 love04520
跟踪递归,我有病?
所以……要么发题目,要么Bye。

PS:Linux风格真丑。

[此贴子已经被作者于2017-6-29 11:32编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-06-29 11:23
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:7 
PS:虽然这个递归看上去有点复杂~不过还是可以理解的~具体就是n个数中按顺序选m个数位和n-m个数位组成两个整数~~这两个整数的最大绝对值~~
测试过结果是342~~~原来运行一下就容易理解了~~看来递归我还是要好好学习一下才行~

[此贴子已经被作者于2017-6-29 13:31编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-29 12:53
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
得分:0 
回复 楼主 love04520
这其实类似于n选m的组合~看来还是可以借鉴学习一下的~还有另外一种试探法就是用for循环~不过这个是两种不同长度的组合是可以有交集的~

PS:突然发现系统的递归栈功能很强大~可以自己构造树的指针结构~并且递归结束后栈空间可以由系统自动回收~有时间可以研究一下~当然栈空间是有限的~

[此贴子已经被作者于2017-6-29 13:59编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-06-29 13:44



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




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

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