本文主要是介绍递归的“中途折返”,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
递归的“中途折返”
魔法六角星由12个不相同的数字组成,每条边的四个数之和都相等,见图1。
通过编程的方法,可以轻松找到多个魔法六角星。以下阅读,请结合源代码阅读一并进行。
一、准备数据
导入sympy中的函数isprime,采用列表推导的方法产生29-73之间的质数,存放在data列表中。
这里的result列表,记录12个数的排列顺序,暨落位情况,见图1。
available是一个两维列表,记录result列表中的每个位置的可用数据列表。
mark用于计数,或找到一个符合要求的列表后,不再继续寻找,逐层返回。
K最终等于12个数之和的三分之一,必须是整数,否则无解。
二、定义若干函数
judge_one函数,判断任意一条边四数之和是否12个数之和的三分之一。
judge_two函数,判断两个对角小三角三数之和是否相等,或判断共顶点的两条边除顶点外的其它三数之和是否相等。用于提前折返判断。见图2。
judge_three函数,在judge_one函数的基础上,判断每条边之和是否都等于12个数之和的三分之一,这也是最终的判断。
early_backtrack函数,在judge_one和judge_two的基础上,判断是否提前折返&#x
这篇关于递归的“中途折返”的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!