def bitstr(n,s):
if n==1:return s
return[digit+ bits for digit in bitstr(1,s) for bits in bitstr(n-1,s)]
print(bitstr(3,'abc'))
请解释这段代码中发生的事情。如何回溯?
答案 0 :(得分:0)
由于巨大的return语句,很难理解此代码。
基本上,除非达到终止条件,否则在所有情况下都将递归。所有回溯都是具有特定终止条件的深度优先搜索。
考虑走过一个迷宫,在每个迷宫中做出决定的地方,该决定就是对调用堆栈的调用(执行深度优先搜索)...如果到达终点,则可以返回路径。但是,如果达到死胡同,则想退出某个决定,实质上就是退出调用堆栈中的函数。
因此,当我想到回溯时,我会在意
每当我们不处于基本情况下时,我们都会通过决策来更改状态,我们会通过在该代码的第3行上进行决策来更改状态,并针对第2行上的终止条件进行决策。
在this video中很好地解释了回溯。