| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1172 人关注过本帖
标题:c语言函数递归调用看不懂了!求教!
只看楼主 加入收藏
yzyx
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-12-24
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
c语言函数递归调用看不懂了!求教!
#include <stdio.h>
int n = 0;
int rest[7][7];
void swap(int *a, int *b)
{
    int m;
    m = *a;
    *a = *b;
    *b = m;
}
void perm(int list[], int k, int m)
{
    int i;
int j;
if(k > m)
{
    for (i=0; i<7; i++)
{
    for (j=0; j<7; j++)
{
    if (rest[i][j] == 0)
return;
if (rest[i][j] != list[i])
continue;
if (rest[i][j] == list[i])
break;
    }
    }
n++;
printf("Solution: %d\n", n);
printf("赵 钱 孙 李 周 吴 陈\n");
printf("=============================================================\n");
for(i = 0; i <= m; i++)
{
    switch (list[i])
{
case 1: printf("星期一");
break;
case 2: printf("星期二 ");
break;
case 3: printf("星期三 ");
break;
case 4: printf("星期四 ");
break;
case 5: printf("星期五 ");
break;
case 6: printf("星期六 ");
break;
case 7: printf("星期日 ");
break;
default:break;
}
}
printf("\n\n\n");}
else{for(i = k; i <= m; i++)
{
    swap(&list[k], &list[i]);
perm(list, k + 1, m);
 swap(&list[k], &list[i]);
}
}
}
int main()
{
    printf("\n");
int list[] = {1, 2, 3, 4, 5, 6, 7};
int i, j;
char ss [7][20]={"赵"," 钱","孙"," 李"," 周"," 吴"," 陈"};
printf("==========================欢迎使用排班系统=======================\n");
printf("请输入下列人选择休息的可能时间:\n");
for(i = 0; i < 7; i++)
{
    printf("%s", ss[i]);
for(j = 0; j < 7; j++)
{
    scanf("%d", &rest[i][j]);
if(rest[i][j] == 0)break;
}
}
printf("\n\n\n");
perm(list, 0, 6);
 getchar();
getchar();
printf("输出完毕,按回车键结束!\n");
return 0;
}

当perm(list, 0, 6);时,程序进入perm函数 应当进入else 但是在else中还有一个perm函数  经过多次循环达到k>m的条件,然后进入循环体, 就是不清楚else{for(i = k; i <= m; i++)在什么时候才能进行 对这个递归很乱 不知道怎么进行 因为课程设计 实在看不懂了才来请教!希望给解答!
搜索更多相关主题的帖子: continue include return c语言 
2016-12-24 12:38
yzyx
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-12-24
收藏
得分:0 
希望大家帮帮我 谢谢!
2016-12-24 12:50
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:20 
每次进行递归保留上一次的“工作状态”,即各个变量没有发生变化~回溯时继续利用上一次保留的数据~

补充一下,每一个递归节点可以进行多次递归,即回溯后又可以进行重新递归,而且每次进入递归都是一个新的递归节点,所有数据除了传递形参外都重新初始化执行~

[此贴子已经被作者于2016-12-24 14:13编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-24 14:07
快速回复:c语言函数递归调用看不懂了!求教!
数据加载中...
 
   



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

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