循环嵌套是非常常用的,之前已经发布写过双循环嵌套的控制变量变形嵌套,在此基础上,演化出无限嵌套算法:
string 字符串 = "123456789";
int 量 = 字符串.Length, 跟 = 0, 定 = 3, 嵌套量 = 量 - 定;
int[] 无限嵌套 = Enumerable.Range(定, 嵌套量).ToArray();
do
{
foreach (int 元 in 无限嵌套)
{/*逐级运算*/
if (元 < 0)
{
if (跟 + 1 >= 嵌套量) break;/*数组最后元素小于0时*/
--无限嵌套[跟 + 1];
无限嵌套[跟] = 定 + 跟;
}
++跟;
}
if (无限嵌套[嵌套量 - 1] >= 0)
Console.WriteLine(string.Join(" ", 无限嵌套));
--无限嵌套[0];
跟 = 0;
} while (无限嵌套[嵌套量 - 1] >= 0);
string 字符串 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 输出 = "";
int 量 = 字符串.Length, 跟 = 量;
int[] 无限嵌套 = Enumerable.Repeat(0, 量).ToArray();
do
{
while (--跟 >= 0)/*逐级运算*/
{
if (无限嵌套[跟] >= 量)
{
if (跟 - 1 < 0) break;/*防止越界*/
++无限嵌套[跟 - 1];
无限嵌套[跟] = 0;
}
}
if (无限嵌套[0] < 量)
//Console.WriteLine(string.Join(" ", 无限嵌套));
foreach (int aa in 无限嵌套)
输出 += 字符串[aa].ToString();
++无限嵌套[量 - 1];
跟 = 量;
Console.WriteLine(输出); 输出 = "";
} while (无限嵌套[0] < 量);
多年前的想法,今天终于实现了,自动嵌套循环的算法,从此不再局限于固定的嵌套循环,以后都可以使用动态的嵌套循环。2016年1月25日10:05
今天整理算法设计演化过程,只是想留给后人参考;写算法我的原则:从易到难,从最简单的语句到优化算法,写算法是慢工细活,慢慢推演转化的过程,与弹指神功无关,任何弹指神功都不如复制粘贴来的快,弹指神功对写算法有何用?弹指神功对于文章编辑讲求经济效率有关,而与写算法毫无关系,写算法是要分析得快,逻辑推演得快,这只与动脑快有关,该算法自打算自己设计想法起经历约月的构思、调试、演化、优化,这里之所以说些弹指神功的话题,是因为人有个特点,越急越想不出来,越想不出来就越不爱自己想了。