字符串的所有子串的各种组合的递归算法的代码看不大懂啊,高人来解释一下啊,谢谢

shu_yoyo 2007-07-01 04:26:06
#include <stdio.h>
#include <string.h>
#include <alloc.h>

char str[ ] = "abcd";
char *out;
int length;
void decombine(char in[],char out[],int length,int rec,int start)
{
int i;
for(i=start;i<length;i++)
{
out[rec] = in[i];
out[rec+1] = '\0';
printf("%s%d\n",out,i);
if(i<length-1)
decombine(in,out,length,rec+1,i+1);
}
}
int main( )
{
length = strlen(str);
out = (char *)malloc(length+1);
decombine(str,out,length,0,0);
return 0;
}
看了很久了,还是不大懂啊,,,5555555,高人来解释一下哈
...全文
652 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
0黄瓜0 2007-07-02
  • 打赏
  • 举报
回复
理解递归先要理解函数的调用.学过一点汇编程序设计就更好了.先从简单的如用递归求阶乘,或用递归反序输出字串等简单递归开始理解.
titanaly 2007-07-01
  • 打赏
  • 举报
回复
还不会跟踪呢.......
jixingzhong 2007-07-01
  • 打赏
  • 举报
回复
对于递归,
如果难以理解,
比较合适的办法就是单步查看执行结果并予以分析 。。。

分析多了就对递归熟悉了 。。。
jixingzhong 2007-07-01
  • 打赏
  • 举报
回复
这个递归太恐怖了 。。。

递归次数按照几何级数上升....
uwinb 2007-07-01
  • 打赏
  • 举报
回复
char str[] = "abc";
char *out;
int len;

void decombine(int end,int start)
{
int i;
for (i=start; i<len; ++i)
{
out[end] = str[i];
out[end+1] = '\0';
printf("%s\n",out,i);
if (i<len-1) decombine(end+1,i+1);
}
}

main( )
{
len = strlen(str);
out = (char*)malloc(len+1);
decombine(0,0);
return 0;
}
uwinb 2007-07-01
  • 打赏
  • 举报
回复
对于函数decombine(char in[],char out[],int length,int rec,int start);
前两三参数(in,out,length)既然已经定义成全局变量,可以在函数参数列表中删除它们,
先不考虑递归,该函数体中有一个循环,它输出(length-start)个长度为(rec+1)的子串。
递归调用时参数(rec+1,i+1),也就是说子串长度在增加,候选字符的范围在缩小。
uwinb 2007-07-01
  • 打赏
  • 举报
回复
如果不是编程,要求你手工写出所有子串,你会怎么考虑?
第一个子串肯定是空串 "" ,空集是所有集合的子集;
然后开始枚举所有单字符的子串 "a" "b" "c" "d"$
接着考虑长些的子串"ab" "ac" "ad"$ "bc" "bd"$ "cd"$
还有更长的子串 "abc" "abd"$ "acd"$ "bcd"$
最长的子串 "abcd"$
可以发现所有子串序列都终结于'd'(见所有带'$'后缀的子串)。
上面的子串呈现树状分布,程序输出所有子串的序列,是对该树的前序遍历,
即先访问树的根结点,再按从左到右有顺序访问它的所有子树。
shu_yoyo 2007-07-01
  • 打赏
  • 举报
回复
高手说一下哈,分不够的话我重新开帖加~
bargio_susie 2007-07-01
  • 打赏
  • 举报
回复
单步跟踪,慢慢体会.
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统中变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研中的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文中提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧