在了解如何用python、lingo解多元一次方程问题之前我们先了解什么是递归,因为python解多元一次方程问题是递归算法的一个经典算法习题,也是python解多元一次方程问题用到的主要算法。
简单说程序调用自身的编程技巧叫递归。递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止。
递归算法主要的难点:
1、如何将原问题转化为一个与原问题规模更小的问题。
2、递归的终止条件。
问题描述:
目标描述:
求解多元一次方程,列出这些解,并统计解的个数。
原问题可以看做为:
问题的规模分布在两个维度上:
· 变量的个数
· 总和S
一个成功的递归算法势必要以某种方式或方程的某种内在联系缩减需要考虑的变量个数以及总和S。
可以将方程的解分为两组:
这种划分方式就是根据各方程之间的内在联系来进行划分,且产生的子问题分别在变量个数与总和上比原问题小。
递归下去到最底层就会触及到边界条件,边界条件为:
这种划分是不重复、无遗漏的,且产生的子问题分别在变量个数与总和上比原问题小。分解不断进行下去就会触及边界,边界条件是:
代码实现:
按照上述思路python实现如下:
因为lingo软件本身的限制,所以使用lingo进行求解,只能求出众多可行解中的一个可行解。