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

递归方法巧解不定方程

阅读更多

多元一次方程往往采用循环求解。笔者在与网友们讨论一个问题(http://expert.csdn.net/Expert/topic/2607/2607772.xml?temp=.7494928)过程中,琢磨出一种算法,采用递归进行多元一次方程的求解。并将解分为整数解和 非负整数解两种情况,请大家指教。

Private Sub Command1_Click() '演示求X1+X2+X3+X4+X5=10整数解
Text1.Text = ""
Dim answer As String
answer = GETRESULT(5, 10, True) '赋值
Dim temp
temp = Split(answer, vbCrLf)
For i = 0 To UBound(temp)
temp(i) = "解" & i + 1 & ":" & vbTab & temp(i) ' add index
Next
answer = Join(temp, vbCrLf)
Text1.Text = "方程 X1+X2+X3+X4+X5=10 共有 " & UBound(temp) + 1 & " 个整数解:" & vbCrLf & answer 'show all answer in textbox

End Sub
Private Sub Command2_Click() '演示求X1+X2+X3+X4+X5=10非负整数解
Text1.Text = ""
Dim answer As String

answer = GETRESULT(5, 10, False) '赋值
Dim temp
temp = Split(answer, vbCrLf)
For i = 0 To UBound(temp)
temp(i) = "解" & i + 1 & ":" & vbTab & temp(i) 'add index
Next
answer = Join(temp, vbCrLf)
Text1.Text = "方程 X1+X2+X3+X4+X5=10 共有 " & UBound(Split(answer, vbCrLf)) + 1 & " 个非零整数解:" & vbCrLf & answer 'show all answer in textbox

End Sub

Private Sub Command3_Click() '演示无解情况
Text1.Text = ""
Dim answer As String

answer = GETRESULT(5, 3, False)
Dim temp
temp = Split(answer, vbCrLf)
For i = 0 To UBound(temp)
temp(i) = "解" & i + 1 & ":" & vbTab & temp(i)
Next
answer = Join(temp, vbCrLf)
Text1.Text = "方程 X1+X2+X3+X4+X5=3 共有 " & UBound(Split(answer, vbCrLf)) + 1 & " 个非零整数解:" & vbCrLf & answer

End Sub

'求解函数
Function GETRESULT(ByVal n As Integer, ByVal SUM As Integer, Optional allowzero As Boolean = True) As String
Dim temp() As String, i As Long
If n = 2 Then '二元方程
If allowzero = True Then
ReDim temp(SUM)
For i = 0 To SUM ' allow zero
temp(i) = "X1=" & i & ",X2=" & SUM - i
Next
GETRESULT = Join(temp, vbCrLf)
Erase temp
Else
ReDim temp(1 To SUM - 1) 'forbid zero
For i = 1 To SUM - 1
temp(i) = "X1=" & i & ",X2=" & SUM - i
Next
GETRESULT = Join(temp, vbCrLf)
Erase temp
End If

End If
If n > 2 Then

If allowzero = True Then
ReDim temp(SUM)
For i = SUM To 0 Step -1 ' allow zero
temp(i) = Replace(GETRESULT(n - 1, i, True), vbCrLf, ",X" & n & "=" & SUM - i & vbCrLf) & ",X" & n & "=" & SUM - i
Next
GETRESULT = Join(temp, vbCrLf)
Erase temp
Else
If SUM < n Then MsgBox "无解!": Exit Function '无解情况
ReDim temp(1 To SUM - n + 1) 'not allow zero
For i = 1 To SUM - n + 1
temp(i) = Replace(GETRESULT(n - 1, SUM - i, False), vbCrLf, ",X" & n & "=" & i & vbCrLf) & ",X" & n & "=" & i '递归
Next

GETRESULT = Join(temp, vbCrLf)
Erase temp
End If
End If
End Function

分享到:
评论

相关推荐

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

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

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

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

    递归方程求解

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

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

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

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

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

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

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

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

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

    递归方程的研究

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

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

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

    用递归方法增加节点.rar

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

    利用递归方法求5!.docx

    在这个例子中,我们使用Java编程语言来实现一个递归方法,计算5的阶乘(5!)。5的阶乘表示为5! = 5 × 4 × 3 × 2 × 1,结果是120。 首先,我们需要理解递归公式:`fn = fn_1 * 4!`。这个公式表明,为了计算任意...

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

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

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

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

    treeview递归方法 查询节点

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

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

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

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

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

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

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

    递归方法求阶层

    递归方法求阶层!

Global site tag (gtag.js) - Google Analytics