`
ihuashao
  • 浏览: 4721948 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

递归方法巧解不定方程(二)

J# 
阅读更多

笔者在2004年曾写过一篇 递归方法巧解不定方程。昨天在一位网友的启发下,对代码进行了重写,使其能够设置每个变量的取值范围。代码如下


Private Sub Command1_Click()
Dim min(1 To 5) As Integer, max(1 To 5) As Integer, RESULT
min(1) = 2
min(2) = 3
max(1) = 3
max(2) = 7
jiefangcheng 5, min, max, 15

End Sub


'求解函数
Sub GETRESULT(ByVal n As Integer, ByRef min() As Integer, ByRef max() As Integer, ByVal SUM As Integer, Optional ByRef resultcount As Long, Optional ByRef RESULT)
Dim temp(), c() As Long, i As Long, j As Long, k As Long, r As Long

If n = 1 Then '一元方程
If SUM >= min(1) And SUM <= max(1) Then
resultcount = 1
ReDim RESULT(1 To 1, 1 To 1)
RESULT(1, 1) = SUM
End If
End If

If n > 1 Then
resultcount = 0
ReDim temp(min(n) To max(n))
ReDim c(min(n) To max(n))
For i = min(n) To max(n)
GETRESULT n - 1, min, max, SUM - i, c(i), temp(i)
resultcount = resultcount + c(i)
Next
If resultcount > 0 Then
ReDim RESULT(1 To resultcount, 1 To n)
For i = min(n) To max(n)
If c(i) > 0 Then
For j = 1 To UBound(temp(i), 1)
r = r + 1
For k = 1 To n - 1
RESULT(r, k) = temp(i)(j, k)
Next
RESULT(r, n) = i
Next
End If
Next
Erase temp
End If
End If


End Sub

Sub jiefangcheng(ByVal n As Integer, ByRef min() As Integer, ByRef max() As Integer, ByVal SUM As Integer, Optional ByRef RESULT)
Dim x() As String, i As Integer, msg As String, resultcount As Long, laptime As Single
laptime = Timer
'默认解的范围为1-SUM
For i = 1 To n
If min(i) = 0 Then min(i) = 1
If max(i) = 0 Then max(i) = SUM
Next

GETRESULT n, min, max, SUM, resultcount, RESULT '赋值

ReDim x(1 To n)
For i = 1 To n
x(i) = "X" & i
Next
msg = "方程" & Join(x, "+") & "=" & SUM

For i = 1 To n
x(i) = "X" & i & "∈[" & min(i) & "," & max(i) & "]"
Next
msg = msg & "当" & Join(x, ",") & " 时" '关于方程的表达式和解的定义域


If resultcount > 0 Then

Debug.Print msg & "共有 " & resultcount & " 个解"
ReDim x(1 To resultcount)
For i = 1 To resultcount
x(i) = "解" & i & ":"
For j = 1 To n
x(i) = x(i) & "X" & j & "=" & RESULT(i, j) & vbTab
Next
Next
Debug.Print Join(x, vbCrLf)
Else

Debug.Print msg & "无解!"
End If
laptime = Timer - laptime
Debug.Print "总计用时" & IIf(laptime < 0, 0, Format(laptime, "0.000")) & "秒!"
End Sub

调试结果如下:

方程X1+X2+X3+X4+X5=15当X1∈[2,3],X2∈[3,7],X3∈[1,15],X4∈[1,15],X5∈[1,15] 时共有 190 个解
解1:X1=3 X2=7 X3=3 X4=1 X5=1
解2:X1=3 X2=6 X3=4 X4=1 X5=1
解3:X1=2 X2=7 X3=4 X4=1 X5=1
解4:X1=3 X2=5 X3=5 X4=1 X5=1
解5:X1=2 X2=6 X3=5 X4=1 X5=1
解6:X1=3 X2=4 X3=6 X4=1 X5=1
解7:X1=2 X2=5 X3=6 X4=1 X5=1
解8:X1=3 X2=3 X3=7 X4=1 X5=1
解9:X1=2 X2=4 X3=7 X4=1 X5=1
解10:X1=2 X2=3 X3=8 X4=1 X5=1
解11:X1=3 X2=7 X3=2 X4=2 X5=1
解12:X1=3 X2=6 X3=3 X4=2 X5=1
解13:X1=2 X2=7 X3=3 X4=2 X5=1
解14:X1=3 X2=5 X3=4 X4=2 X5=1
解15:X1=2 X2=6 X3=4 X4=2 X5=1
解16:X1=3 X2=4 X3=5 X4=2 X5=1
解17:X1=2 X2=5 X3=5 X4=2 X5=1
解18:X1=3 X2=3 X3=6 X4=2 X5=1
解19:X1=2 X2=4 X3=6 X4=2 X5=1
解20:X1=2 X2=3 X3=7 X4=2 X5=1
解21:X1=3 X2=7 X3=1 X4=3 X5=1
解22:X1=3 X2=6 X3=2 X4=3 X5=1
解23:X1=2 X2=7 X3=2 X4=3 X5=1
解24:X1=3 X2=5 X3=3 X4=3 X5=1
解25:X1=2 X2=6 X3=3 X4=3 X5=1
解26:X1=3 X2=4 X3=4 X4=3 X5=1
解27:X1=2 X2=5 X3=4 X4=3 X5=1
解28:X1=3 X2=3 X3=5 X4=3 X5=1
解29:X1=2 X2=4 X3=5 X4=3 X5=1
解30:X1=2 X2=3 X3=6 X4=3 X5=1
解31:X1=3 X2=6 X3=1 X4=4 X5=1
解32:X1=2 X2=7 X3=1 X4=4 X5=1
解33:X1=3 X2=5 X3=2 X4=4 X5=1
解34:X1=2 X2=6 X3=2 X4=4 X5=1
解35:X1=3 X2=4 X3=3 X4=4 X5=1
解36:X1=2 X2=5 X3=3 X4=4 X5=1
解37:X1=3 X2=3 X3=4 X4=4 X5=1
解38:X1=2 X2=4 X3=4 X4=4 X5=1
解39:X1=2 X2=3 X3=5 X4=4 X5=1
解40:X1=3 X2=5 X3=1 X4=5 X5=1
解41:X1=2 X2=6 X3=1 X4=5 X5=1
解42:X1=3 X2=4 X3=2 X4=5 X5=1
解43:X1=2 X2=5 X3=2 X4=5 X5=1
解44:X1=3 X2=3 X3=3 X4=5 X5=1
解45:X1=2 X2=4 X3=3 X4=5 X5=1
解46:X1=2 X2=3 X3=4 X4=5 X5=1
解47:X1=3 X2=4 X3=1 X4=6 X5=1
解48:X1=2 X2=5 X3=1 X4=6 X5=1
解49:X1=3 X2=3 X3=2 X4=6 X5=1
解50:X1=2 X2=4 X3=2 X4=6 X5=1
解51:X1=2 X2=3 X3=3 X4=6 X5=1
解52:X1=3 X2=3 X3=1 X4=7 X5=1
解53:X1=2 X2=4 X3=1 X4=7 X5=1
解54:X1=2 X2=3 X3=2 X4=7 X5=1
解55:X1=2 X2=3 X3=1 X4=8 X5=1
解56:X1=3 X2=7 X3=2 X4=1 X5=2
解57:X1=3 X2=6 X3=3 X4=1 X5=2
解58:X1=2 X2=7 X3=3 X4=1 X5=2
解59:X1=3 X2=5 X3=4 X4=1 X5=2
解60:X1=2 X2=6 X3=4 X4=1 X5=2
解61:X1=3 X2=4 X3=5 X4=1 X5=2
解62:X1=2 X2=5 X3=5 X4=1 X5=2
解63:X1=3 X2=3 X3=6 X4=1 X5=2
解64:X1=2 X2=4 X3=6 X4=1 X5=2
解65:X1=2 X2=3 X3=7 X4=1 X5=2
解66:X1=3 X2=7 X3=1 X4=2 X5=2
解67:X1=3 X2=6 X3=2 X4=2 X5=2
解68:X1=2 X2=7 X3=2 X4=2 X5=2
解69:X1=3 X2=5 X3=3 X4=2 X5=2
解70:X1=2 X2=6 X3=3 X4=2 X5=2
解71:X1=3 X2=4 X3=4 X4=2 X5=2
解72:X1=2 X2=5 X3=4 X4=2 X5=2
解73:X1=3 X2=3 X3=5 X4=2 X5=2
解74:X1=2 X2=4 X3=5 X4=2 X5=2
解75:X1=2 X2=3 X3=6 X4=2 X5=2
解76:X1=3 X2=6 X3=1 X4=3 X5=2
解77:X1=2 X2=7 X3=1 X4=3 X5=2
解78:X1=3 X2=5 X3=2 X4=3 X5=2
解79:X1=2 X2=6 X3=2 X4=3 X5=2
解80:X1=3 X2=4 X3=3 X4=3 X5=2
解81:X1=2 X2=5 X3=3 X4=3 X5=2
解82:X1=3 X2=3 X3=4 X4=3 X5=2
解83:X1=2 X2=4 X3=4 X4=3 X5=2
解84:X1=2 X2=3 X3=5 X4=3 X5=2
解85:X1=3 X2=5 X3=1 X4=4 X5=2
解86:X1=2 X2=6 X3=1 X4=4 X5=2
解87:X1=3 X2=4 X3=2 X4=4 X5=2
解88:X1=2 X2=5 X3=2 X4=4 X5=2
解89:X1=3 X2=3 X3=3 X4=4 X5=2
解90:X1=2 X2=4 X3=3 X4=4 X5=2
解91:X1=2 X2=3 X3=4 X4=4 X5=2
解92:X1=3 X2=4 X3=1 X4=5 X5=2
解93:X1=2 X2=5 X3=1 X4=5 X5=2
解94:X1=3 X2=3 X3=2 X4=5 X5=2
解95:X1=2 X2=4 X3=2 X4=5 X5=2
解96:X1=2 X2=3 X3=3 X4=5 X5=2
解97:X1=3 X2=3 X3=1 X4=6 X5=2
解98:X1=2 X2=4 X3=1 X4=6 X5=2
解99:X1=2 X2=3 X3=2 X4=6 X5=2
解100:X1=2 X2=3 X3=1 X4=7 X5=2
解101:X1=3 X2=7 X3=1 X4=1 X5=3
解102:X1=3 X2=6 X3=2 X4=1 X5=3
解103:X1=2 X2=7 X3=2 X4=1 X5=3
解104:X1=3 X2=5 X3=3 X4=1 X5=3
解105:X1=2 X2=6 X3=3 X4=1 X5=3
解106:X1=3 X2=4 X3=4 X4=1 X5=3
解107:X1=2 X2=5 X3=4 X4=1 X5=3
解108:X1=3 X2=3 X3=5 X4=1 X5=3
解109:X1=2 X2=4 X3=5 X4=1 X5=3
解110:X1=2 X2=3 X3=6 X4=1 X5=3
解111:X1=3 X2=6 X3=1 X4=2 X5=3
解112:X1=2 X2=7 X3=1 X4=2 X5=3
解113:X1=3 X2=5 X3=2 X4=2 X5=3
解114:X1=2 X2=6 X3=2 X4=2 X5=3
解115:X1=3 X2=4 X3=3 X4=2 X5=3
解116:X1=2 X2=5 X3=3 X4=2 X5=3
解117:X1=3 X2=3 X3=4 X4=2 X5=3
解118:X1=2 X2=4 X3=4 X4=2 X5=3
解119:X1=2 X2=3 X3=5 X4=2 X5=3
解120:X1=3 X2=5 X3=1 X4=3 X5=3
解121:X1=2 X2=6 X3=1 X4=3 X5=3
解122:X1=3 X2=4 X3=2 X4=3 X5=3
解123:X1=2 X2=5 X3=2 X4=3 X5=3
解124:X1=3 X2=3 X3=3 X4=3 X5=3
解125:X1=2 X2=4 X3=3 X4=3 X5=3
解126:X1=2 X2=3 X3=4 X4=3 X5=3
解127:X1=3 X2=4 X3=1 X4=4 X5=3
解128:X1=2 X2=5 X3=1 X4=4 X5=3
解129:X1=3 X2=3 X3=2 X4=4 X5=3
解130:X1=2 X2=4 X3=2 X4=4 X5=3
解131:X1=2 X2=3 X3=3 X4=4 X5=3
解132:X1=3 X2=3 X3=1 X4=5 X5=3
解133:X1=2 X2=4 X3=1 X4=5 X5=3
解134:X1=2 X2=3 X3=2 X4=5 X5=3
解135:X1=2 X2=3 X3=1 X4=6 X5=3
解136:X1=3 X2=6 X3=1 X4=1 X5=4
解137:X1=2 X2=7 X3=1 X4=1 X5=4
解138:X1=3 X2=5 X3=2 X4=1 X5=4
解139:X1=2 X2=6 X3=2 X4=1 X5=4
解140:X1=3 X2=4 X3=3 X4=1 X5=4
解141:X1=2 X2=5 X3=3 X4=1 X5=4
解142:X1=3 X2=3 X3=4 X4=1 X5=4
解143:X1=2 X2=4 X3=4 X4=1 X5=4
解144:X1=2 X2=3 X3=5 X4=1 X5=4
解145:X1=3 X2=5 X3=1 X4=2 X5=4
解146:X1=2 X2=6 X3=1 X4=2 X5=4
解147:X1=3 X2=4 X3=2 X4=2 X5=4
解148:X1=2 X2=5 X3=2 X4=2 X5=4
解149:X1=3 X2=3 X3=3 X4=2 X5=4
解150:X1=2 X2=4 X3=3 X4=2 X5=4
解151:X1=2 X2=3 X3=4 X4=2 X5=4
解152:X1=3 X2=4 X3=1 X4=3 X5=4
解153:X1=2 X2=5 X3=1 X4=3 X5=4
解154:X1=3 X2=3 X3=2 X4=3 X5=4
解155:X1=2 X2=4 X3=2 X4=3 X5=4
解156:X1=2 X2=3 X3=3 X4=3 X5=4
解157:X1=3 X2=3 X3=1 X4=4 X5=4
解158:X1=2 X2=4 X3=1 X4=4 X5=4
解159:X1=2 X2=3 X3=2 X4=4 X5=4
解160:X1=2 X2=3 X3=1 X4=5 X5=4
解161:X1=3 X2=5 X3=1 X4=1 X5=5
解162:X1=2 X2=6 X3=1 X4=1 X5=5
解163:X1=3 X2=4 X3=2 X4=1 X5=5
解164:X1=2 X2=5 X3=2 X4=1 X5=5
解165:X1=3 X2=3 X3=3 X4=1 X5=5
解166:X1=2 X2=4 X3=3 X4=1 X5=5
解167:X1=2 X2=3 X3=4 X4=1 X5=5
解168:X1=3 X2=4 X3=1 X4=2 X5=5
解169:X1=2 X2=5 X3=1 X4=2 X5=5
解170:X1=3 X2=3 X3=2 X4=2 X5=5
解171:X1=2 X2=4 X3=2 X4=2 X5=5
解172:X1=2 X2=3 X3=3 X4=2 X5=5
解173:X1=3 X2=3 X3=1 X4=3 X5=5
解174:X1=2 X2=4 X3=1 X4=3 X5=5
解175:X1=2 X2=3 X3=2 X4=3 X5=5
解176:X1=2 X2=3 X3=1 X4=4 X5=5
解177:X1=3 X2=4 X3=1 X4=1 X5=6
解178:X1=2 X2=5 X3=1 X4=1 X5=6
解179:X1=3 X2=3 X3=2 X4=1 X5=6
解180:X1=2 X2=4 X3=2 X4=1 X5=6
解181:X1=2 X2=3 X3=3 X4=1 X5=6
解182:X1=3 X2=3 X3=1 X4=2 X5=6
解183:X1=2 X2=4 X3=1 X4=2 X5=6
解184:X1=2 X2=3 X3=2 X4=2 X5=6
解185:X1=2 X2=3 X3=1 X4=3 X5=6
解186:X1=3 X2=3 X3=1 X4=1 X5=7
解187:X1=2 X2=4 X3=1 X4=1 X5=7
解188:X1=2 X2=3 X3=2 X4=1 X5=7
解189:X1=2 X2=3 X3=1 X4=2 X5=7
解190:X1=2 X2=3 X3=1 X4=1 X5=8
总计用时0.410秒!

分享到:
评论

相关推荐

    算法时间复杂度分析中递归方程求解方法综述

    ### 算法时间复杂度分析中递归方程求解方法综述 #### 引言 在计算机科学领域,递归是一种常见的编程思想和技术,它不仅被广泛应用于各种算法的设计之中,也是评估算法效率的重要工具之一。递归方程在算法的时间...

    递归方程组解的渐进阶的求法

    递归方程组解的渐进阶的求法 递归方程组解的渐进阶的求法是计算机...递归方程组解的渐进阶的求法是一个非常重要的课题,代入法和迭代法是两种常用的方法,这些方法可以帮助我们更好地解决递归方程组解的渐进阶问题。

    递归方程求解

    ### 递归方程求解方法详解 #### 一、递推法 递推法是一种直接根据递归方程的定义来求解递归方程的方法。这种方法适用于那些可以直接通过迭代计算来找到规律的递归方程。 **例1:Hanoi塔问题** Hanoi塔问题是一个...

    分别用递归和非递归方法实现二分查找算法 的完整程序

    分别用递归和非递归方法实现二分查找算法 的完整程序,indexof()返回的是循环实现的二分法查找,getindex()实现的是递归算法实现的二分法查找。

    递归梯度法神经网络求解线性矩阵方程

    神经网络,特别是递归神经网络(Hopfield网络),在解决线性矩阵方程Ax=b的问题上表现出独特优势。在介绍如何使用这种网络进行求解之前,有必要先理解一些基础概念,包括人工神经网络的起源、特点及其在矩阵运算中的...

    7递归方程组解的渐进阶的求法——代入法[汇编].pdf

    递归方程组解的渐进阶的求法——代入法是指通过数学归纳法来证明递归方程的解的渐近阶的方法。这个方法的关键步骤在于预先对解答作出推测,然后用数学归纳法证明推测的正确性。 例如,我们要估计 T(n) 的上界,T(n)...

    用c# 递归方法,遍历目录

    用c# 递归方法,遍历目录,输入一个路径,能输出此路径下的全部文件和文件夹里的内容

    递归方程的研究

    在编程中,递归是解决许多问题的有效方法,如树和图的遍历、动态规划、分治策略等。递归函数通常包含两个基本部分:基本情况(base case)和递归情况(recursive case)。基本情况是问题可以直接解决的最简单形式,...

    递归方法编程,检查是否是回文

    采用递归方法编程,检查一个任意给定的字符串是否是回文

    算法_求解递归方程的方法.doc

    "算法_求解递归方程的方法" 在计算机科学和数学领域中,递归方程是一种常见的数学模型,用于描述递归关系的序列。求解递归方程是解决许多计算机科学和数学问题的关键步骤。本文将讨论使用生成函数和特征方程两种...

    一个简单的C程序递归方法求5!

    递归方法求5! 这是一个小程序,程序中编写了递归方法求5! 希望对大家有所帮助!

    用递归方法增加节点.rar

    本资源“用递归方法增加节点.rar”显然关注的是如何使用递归来添加节点到某种数据结构,可能是链表、树或其他自相似的数据结构。下面我们将详细探讨递归的概念以及如何使用递归在这些数据结构中添加节点。 递归是...

    treeview递归方法 查询节点

    在上述代码片段中,我们看到了一个具体的实现案例,即通过递归方法查询并构建`treeview`的节点。接下来,我们将深入分析这一知识点,包括其原理、代码解析以及可能的应用场景。 ### 1. 知识点概述:`treeview`递归...

    C#递归方法求阶乘字符串反转小程序

    在这个特定的案例中,我们将探讨如何使用递归方法计算阶乘以及实现字符串反转功能。这两个概念都是计算机科学的基础,并且在实际编程中有着广泛的应用。 首先,让我们理解阶乘的概念。阶乘是指一个正整数n的所有...

    算法:求解递归方程-11(1)ppt

    算法复杂性经常描述为递归方程,解递归方程得到算法复杂性的具体表示 用特征方程解递归方程 用生成函数解递归方程 用递推方法解递归方程

    算法分析\求解递归方程的方法

    求解递推方程的方法有很多种,其中包括: 1. **公式法**:适用于常系数线性递推方程。首先,我们需要找到递推方程的特征方程,解出其特征根。如果特征根都是不同的,那么递推方程的通解就是每个特征根对应部分的线性...

    c语言二分法递归求解函数根

    通过这种方式,我们利用C语言的递归特性,实现了二分法求解方程根的方法。这种方法的优点在于其简洁性和效率,但需要注意的是,由于每次只将区间减半,因此对于较大的区间,可能需要较多的递归层次。在实际编程中,...

    Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例

    递归方法在实现上通常比较简洁,且容易理解,但若递归层级过深,容易造成栈溢出,且效率不高。在本示例中,递归实现的函数gcd_test_two通过不断地让较大数除以较小数的余数来缩小问题规模,直到余数为零,此时较小数...

    递归方法求阶层

    递归方法求阶层!

Global site tag (gtag.js) - Google Analytics