精华内容
下载资源
问答
  • VB递归调用程序

    2019-03-02 14:20:58
    第一次调用,参数值为6,是偶数所再次调用fun过程,这次参数为6/2=3,是奇数,不再调用自身,接着执行下一句输出参数值即3,然后返回第一次调用过程中执行下一句输出第一次调用参数值,即6。 因此程序会输出3 6。...

    Private Sub Command1_Click()
      Dim x As Integer
      x=Val(InputBox(“请输入一个整数”))
      fun(x)
    End Sub
    Private Sub fun(x As Integer)
      If x Mod 2=0 Then fun(x / 2)
      Print x;
    End Sub
    问题:当输入6时,窗体如何显示?
    解析:fun过程是一个递归过程,它的结束条件是参数值为奇数。
    第一次调用,参数值为6,是偶数所再次调用fun过程,这次参数为6/2=3,是奇数,不再调用自身,接着执行下一句输出参数值即3,然后返回第一次调用过程中执行下一句输出第一次调用参数值,即6。
    因此程序会输出3 6。

    展开全文
  • VB6.0过程的递归调用

    2009-06-10 07:54:57
    VB6.0过程的递归调用:在调用一个子程序或函数的过程中又出现直接或间接调用该子程序或函数本身,称为过程的递归调用
  • 数据表结构如下: 会员ID 上一级ID 会员金额 1 0 100 2 1 50 ...SELECT convert(varchar(10),上一级ID) + '|' + convert(varchar(10),...在C#或VB.NET程序中,怎么循环执行这个存储过程,上级返回0才退出这个循环。
  • vb实现递归操作HANNO

    2009-11-30 09:34:53
    运用vb实现递归操作HANNO 动态实现调用过程
  • 一、递归函数的基本概念递归函数机制理解:调用函数的静态和动态机制理解:调用函数和被调用函数虽然是同一个静态代码,但是运行时...递归的调用形式:直接递归调用F1->F1,间接递归F1->F2->F1,很多情况下...

    一、递归函数的基本概念

    递归函数机制理解:调用函数的静态和动态机制理解:调用函数和被调用函数虽然是同一个静态代码,但是运行时被函数运行的栈空间独立于调用函数的栈空间,调用点不同,函数状态栈地址也不同,所以运行时调用函数和被调用函数在代码副本还是数据副本上都是完全不同的,只有通过返回值和调用点进行联系。

    递归的调用形式:直接递归调用F1->F1,间接递归F1->F2->F1,很多情况下是直接递归调用。

    递归函数优劣点:递归函数比较消耗栈资源,实现简单(内部调用逻辑却比较复杂),但是效率没有非递归版本效率高。

    二、递归函数内部调用逻辑理解:

    浅层次理解:

    1.递归函数需要一个终止条件。

    2.递归函数到终止条件,会沿路出栈对称返回。

    深层次理解:

    I、深究内部过程,调用点和变量寄存器:压栈过程,调用点关联,除了调用点传入参数和返回值外的代码变量都因被拷贝了一份而作用域无效

    递归函数就是函数调用和被调用的压栈关系,只有找到都会递归调用,所以递归遍历都是深度遍历。

    II、区分终止条件:递归终止条件多样性,区分那些是终止条件那些不是

    递归函数的终止条件就是在不断的递归调用下最后会发生不再调用递归函数的情况,可以是if判断也可以是for/while判断。

    III、理解出栈返回过程:终止后出栈调用点返回,继续执行函数体内因返回点没有得到执行的代码

    一般递归是为了遍历或者查找,如果查找终止条件在递归遍历前面,那么不用全部遍历找到就会返回;如果查找终止条件在递归遍历后面,那么需要全部遍历才会返回。

    三、一个遍历3ds Max导出节点的递归算法的模拟示例

    RecursiveFunc.h文件:

    #ifndef RECURSIVEFUNC_H_#define RECURSIVEFUNC_H_#include #include using namespace std;typedef struct tagMaxTreeNode{int m_nIndex;string m_strName;tagMaxTreeNode(int nIndex, const string& strName){m_nIndex = nIndex;m_strName = strName;}void AddChild(tagMaxTreeNode* pChild){m_listChild.push_back(pChild);}list m_listChild;}MaxTreeNode; template class MaxTree{public:MaxTree(){m_root = NULL;}~MaxTree(){}void AddNode(T *pParent, T *pChild){if( pParent == NULL ){m_root = pParent;return;}else{pParent->AddChild(pChild);}} void BrowseF( T* pNode){printf("BrowseF:Recursive Call nIndex: %d", pNode->m_nIndex);// 这里if是终止条件if( pNode->m_nIndex < 10 ){printf("BrowseF:Condition Hit nIndex: %d", pNode->m_nIndex);return;}list::iterator itrChild = pNode->m_listChild.begin();// 这里for也是是终止条件,因为pNode是子节点的了for(; itrChild != pNode->m_listChild.end(); ++itrChild){BrowseF( *itrChild);}} void BrowseL( T* pNode){printf("BrowseF:Recursive Call nIndex: %d", pNode->m_nIndex);list::iterator itrChild = pNode->m_listChild.begin();// 这里for是终止条件,因为pNode是子节点的了 for(; itrChild != pNode->m_listChild.end(); ++itrChild){BrowseF( *itrChild);}// 这里if不是终止条件if( pNode->m_nIndex < 10 ){printf("BrowseF:Condition Hit nIndex: %d", pNode->m_nIndex);return;}}private: T* m_root;};#endif

    main1.cpp文件:

    #include "stdafx.h"#include "RecursiveFunc.h" int _tmain(int argc, _TCHAR* argv[]){MaxTreeNode node1(1, "node1");MaxTreeNode node2(10, "node2");MaxTreeNode node3(100, "node3");MaxTreeNode node4(1000, "node4");MaxTreeNode node5(10000, "node5"); /*MaxTreeNode node1(1000, "node1");MaxTreeNode node2(1000, "node2");MaxTreeNode node3(100, "node3");MaxTreeNode node4(100, "node4");MaxTreeNode node5(1, "node5");*/ MaxTree TestTree;TestTree.AddNode(NULL, &node1);TestTree.AddNode(&node1, &node2);TestTree.AddNode(&node1, &node3);TestTree.AddNode(&node2, &node4);TestTree.AddNode(&node3, &node5);printf("------------TestTree.BrowseF(&node1);-------");TestTree.BrowseF(&node1);printf("------------TestTree.BrowseL(&node1);-------");TestTree.BrowseL(&node1);return 0;}

    输出结果:

    d49eb6bdff91b99b29e1f978875bb30f.png

    main2.cpp:

    #include "stdafx.h"#include "RecursiveFunc.h"int _tmain(int argc, _TCHAR* argv[]){/*MaxTreeNode node1(1, "node1");MaxTreeNode node2(10, "node2");MaxTreeNode node3(100, "node3");MaxTreeNode node4(1000, "node4");MaxTreeNode node5(10000, "node5");*/MaxTreeNode node1(10000, "node1");MaxTreeNode node2(1000, "node2");MaxTreeNode node3(100, "node3");MaxTreeNode node4(100, "node4");MaxTreeNode node5(1, "node5");MaxTree TestTree;TestTree.AddNode(NULL, &node1);TestTree.AddNode(&node1, &node2);TestTree.AddNode(&node1, &node3);TestTree.AddNode(&node2, &node4);TestTree.AddNode(&node3, &node5);printf("------------TestTree.BrowseF(&node1);-------");TestTree.BrowseF(&node1);printf("------------TestTree.BrowseL(&node1);-------");TestTree.BrowseL(&node1);return 0;}

    输出结果:

    31c885a5a18e7166abc571b264e9d23d.png

    最后,如果你想学C/C++可以私信小编“01”获取素材资料以及开发工具和听课权限哦!

    展开全文
  • 递归函数用两种方法说明,子函数调用VB6.0源代码编写
  • 递归算法在VB程序设计中的实现 摘 要:递归是计算机科学的一个重要概念,递归算法是程序设计中经常采用和有效的编程...递归调用;程序设计  中图分类号:G434 文献标志码:A 文章编号:1002 - 0845 (2008) 11 - 0069 - 02
  • VB函数Dir实现递归搜索目录

    千次阅读 2005-04-17 01:59:00
    也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数.事实上,直接采用Dir()函数是不能进行自身的递归的调用的,但我们可以采用一种办法把Dir将当前搜索目录的子目录给...

    用VB函数Dir实现递归搜索目录

        我在很久以前就实现了这个方法了.它没有采用任何的控件形式.也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数.事实上,直接采用Dir()函数是不能进行自身的递归的调用的,但我们可以采用一种办法把Dir将当前搜索目录的子目录给保存下来,然后在自身的search(strPathName)递归函数中依次进行递归的调用,这样就可以把指定的目录搜索完毕.

        具体代码如下:

     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    '函数GetExtName

    '功能:得到文件后缀名(扩展名)

    '输入:文件名

    '输出:文件后缀名(扩展名)

     '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    Public Function GetExtName(strFileName As String) As String
      Dim strTmp As String
      Dim strByte As String
      Dim i As Long
      For i = Len(strFileName) To 1 Step -1
         strByte = Mid(strFileName, i, 1)
         If strByte <> "." Then
            strTmp = strByte + strTmp
        Else
          Exit For
        End If
      Next i
      GetExtName = strTmp
    End Function
    Public Function search(ByVal strPath As String, Optional strSearch As String = "") As Boolean
      Dim strFileDir() As String
      Dim strFile As String
      Dim i As Long
     
      Dim lDirCount As Long
      On Error GoTo MyErr
      If Right(strPath, 1) <> "/" Then strPath = strPath + "/"
      strFile = Dir(strPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)
      While strFile <> "" '搜索当前目录
            DoEvents
            If (GetAttr(strPath + strFile) And vbDirectory) = vbDirectory Then '如果找到的是目录
               If strFile <> "." And strFile <> ".." Then '排除掉父目录(..)和当前目录(.)
                   lDirCount = lDirCount + 1 '将目录数增1
                   ReDim Preserve strFileDir(lDirCount) As String
                   strFileDir(lDirCount - 1) = strFile '用动态数组保存当前目录名
               End If
            Else
                If strSearch = "" Then
                   Form1.List1.AddItem strPath + strFile
                ElseIf LCase(GetExtName(strPath + strFile)) = LCase(GetExtName(strSearch)) Then
                  '满足搜索条件,则处理该文件
                   Form1.List1.AddItem strPath + strFile  '将文件全名保存至列表框List1中
                End If
            End If
            strFile = Dir
      Wend
      For i = 0 To lDirCount - 1
          Form1.Label3.Caption = strPath + strFileDir(i)
          Call search(strPath + strFileDir(i), strSearch) '递归搜索子目录
      Next
      ReDim strFileDir(0) '将动态数组清空
      search = True '搜索成功
      Exit Function
    MyErr:
      search = False '搜索失败
    End Function

    展开全文
  • 它没有采用任何的控件形式,也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数。事实上,直接采用Dir()函数是不能进行自身的递归的调用的,但我们可以采用一种...
    我在很久以前就实现了这个方法了。它没有采用任何的控件形式,也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数。事实上,直接采用Dir()函数是不能进行自身的递归的调用的,但我们可以采用一种办法把Dir将当前搜索目录的子目录给保存下来,然后在自身的search(strPathName)递归函数中依次进行递归的调用,这样就可以把指定的目录搜索完毕。 
    具体代码如下:

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    '函数GetExtName
    '功能:得到文件后缀名(扩展名)
    '输入:文件名
    '输出:文件后缀名(扩展名)

    '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

    Public Function GetExtName(strFileName As String) As String
     Dim strTmp As String
     Dim strByte As String
     Dim i As Long
     For i = Len(strFileName) To 1 Step -1
      strByte = Mid(strFileName, i, 1)
      If strByte <> "." Then
       strTmp = strByte + strTmp
      Else
       Exit For
      End If
     Next i
     GetExtName = strTmp
    End Function

    Public Function search(ByVal strPath As String, Optional strSearch As String = "") As Boolean
     Dim strFileDir() As String
     Dim strFile As String
     Dim i As Long

     Dim lDirCount As Long
     On Error GoTo MyErr
     If Right(strPath, 1) <> "\" Then strPath = strPath + "\"
     strFile = Dir(strPath, vbDirectory Or vbHidden Or vbNormal Or vbReadOnly)
     While strFile <> "" '搜索当前目录
     DoEvents
      If (GetAttr(strPath + strFile) And vbDirectory) = vbDirectory Then '如果找到的是目录
       If strFile <> "." And strFile <> ".." Then '排除掉父目录(..)和当前目录(.)
        lDirCount = lDirCount + 1 '将目录数增1
        ReDim Preserve strFileDir(lDirCount) As String
        strFileDir(lDirCount - 1) = strFile '用动态数组保存当前目录名 
       End If
      Else
       If strSearch = "" Then
        Form1.List1.AddItem strPath + strFile
       ElseIf LCase(GetExtName(strPath + strFile)) = LCase(GetExtName(strSearch)) Then
        '满足搜索条件,则处理该文件
        Form1.List1.AddItem strPath + strFile '将文件全名保存至列表框List1中
       End If
      End If
      strFile = Dir
     Wend
     For i = 0 To lDirCount - 1
      Form1.Label3.Caption = strPath + strFileDir(i)
      Call search(strPath + strFileDir(i), strSearch) '递归搜索子目录
     Next
     ReDim strFileDir(0) '将动态数组清空
     search = True '搜索成功
     Exit Function
    MyErr:
     search = False '搜索失败
    End Function

    转载于:https://www.cnblogs.com/mwming/archive/2012/07/26/2609753.html

    展开全文
  • 也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数.事实上,直接采用Dir()函数是不能进行自身的递归的调用的,但我们可以采用一种办法把Dir将当前搜索目录的子目录给...
  • VB函数Dir实现递归搜索目录 我在很久以前就实现了这个方法了.它没有采用任何的控件形式.也没有调用系统API函数FindFirst,FindNext进行递归调用,和别人有点不同的就是我用的是VB中的Dir()函数.事实...
  • 主要内容是,自定义函数过程和子过程声明与调用的语法格式、参数含义及功能特性;三种参数传递方式(值传递、地址传递、数组传递)的应用;嵌套调用和递归调用的执行流程以及递归过程的特点
  • 一、递归递归是经常在企业笔试中考到的问题,也是一种特殊的执行程序,它是用方法调用自身的形式实现的,让程序代码循环执行。说白了,就是自己调用自己。类似while(True){}的循环语句,并且语句中如果没有判断中断...
  • 简言之,递归过程就是子程序自己调用自己。在编程有时采用递归的思路进行编程往往能够起到事半功倍的作用。 Win95的资源管理器具有界面直观、 操作简便的特点,深受广大电脑爱好者的欢迎和喜爱。 下面就采用递归过程...
  • 递归函数

    2020-06-30 21:55:31
    递归是一种算法,不是VB或是哪一种编程语言的………… 所谓递归就是在过程中调用过程本身。一般用递归的代码都能用循环来代替。但递归的代码简洁,比循环更容易看懂。 不过由于递归会不断的堆栈要花费相当大的空间与...
  • 系统文件递归查询

    2012-01-19 15:07:51
     [b] [[/b][b]摘要]:[/b]针对文件系统对象(FileSystemObject)进行特殊的函数编程,也能实现递归调用,可以在VB、ASP、VBS等语言中广泛使用,以实现文件的快速查找等。  [b]关键词:[/b]文件系统对象,引用,...
  • 递归的感悟

    2017-04-04 13:47:00
    求n阶乘的VB函数过程。 Private Function F( byval n As Integer ) As long If n=1 Then F=1 Else: F=n*F(n-1) End If End Function 让我们来跟踪这个程序的计算过程,令n=4调用这个函数,用...
  • vb6.0文件搜索查找程序实例,操作时选取文件夹所在的路径,选择文件所在范围,输入要查找的文件名进行搜索,调用SearchDirs函数查找文件,声明搜索文件要用到API函数和变量类型,递归调用Searchdirs自定义过程,实现...
  • 在上一文中,采用了递归调用,虽然便于理解,但是算法的效率上打个折扣。本文一并重写,改为循环调用。  代码赋予其后,用的是VB2005  两个类,一个是clsPermutation,用来计算排列的;一个是clsCombination,用来...
  • 自己写的一个密码穷举,递归调用,代码非常简单,但大家都应该知道,凡是递归都是低效率的,而居然是穷举,也就不必要去讨论效率了!虽然很简单,但没想到这个方法的,要解决这个问题还是比较难的,希望对大家有用。
  • 目前市面上的介绍VB的树控件的使用过于粗糙,基本上只能实现三层,而且装载树的代码基本上就是有多少层就套多少层循环,这样的代码既不负责,本人写了一个用递归调用来实现装载树的方法,相关树在数据的存储,如果你...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

vb递归调用