递归的处理,关注一下递归的开始和结束
在程序执行过程中,发生了多次的函数的重入,但是有区别,即第三参数k在变化
这个变化会触发第一个判断(收敛条件)的成立,导致递归结束
这里的场景比较复杂,树形结构的递归
123数组,第二个for循环语句将上一层进来的程序分成多个执行流
做的事情就是交换数组元素内容,交换的位置为i和n
执行完再换回来(从上下文看确实是可逆处理)
123(123,213,321)这是第一轮的变化,此时k为0
接着这多个场景分三条支线走第二层,此时k为1
123(123,213,321)
213(213,123,312)
321(321,231,123)
下面在依次对这九个场景继续执行交换流程,此时k为2,与n相等,再进下一轮就到了结束的条件
那么按理说应该打印9乘以3有27条,结果却是6条
是因为上面分析有错误,即每一轮的开始交换位置是从k开始,而不是从0
故上面列的k为1变化应该是
123(123,132)
213(213,231)
321(321,312)
第一个元素不参与变化位置
最后一轮k为2的次数也会“缩水”为1,基于上面的6个分支结果为
123 132 213 231 321 312
嗯,可以按自己的方式去解读,不用怕错,大胆推论小心论证
注意执行流程细节,变化的点
[此贴子已经被作者于2020-11-22 18:57编辑过]