在LabVIEW中使用递归算法



主要软件:
主要软件版本: 8.2
主要软件修正版本: N/A
次要软件: N/A

问题: LabVIEW支持递归吗?我该如何在LabVIEW中创建递归的VI?

解答:

是的,LabVIEW确实支持递归。按照下面的步骤来创建一个递归VI。

关于递归

一个可以调用自己的VI就叫做递归VI 。换言之,如果LabVIEW应用中使用递归,它就会打开很多自己的拷贝,从而完成指定的任务。例如,一个递归的典型应用就是计算一个阶乘(用!表示)。任何正整数的阶乘就是从1开始一直乘到这个数的结果。因此,3! = 3*2*1 = 6。在下面附带的递归VI factorial.vi 例子通过将当前数与当前数-1的阶乘相乘而得,也就是调用了自己。 数学公式如下,3!=3*(2!)。在这个递归factorial VI中,1!和0!(特殊情况)被定义为结果是1。

可重入VI


需要强调的一点是,一个递归VI必须在内存中复制它的很多备份,这个VI我们也把它叫作可重入的。换句话来说,每个递归VI的实例有它自己的,与其他实例VI不一样的数据。下面所列的步骤保证了一个递归VI被设置为可重入的。

创建一个递归的步骤


按照下面的步骤,将一个VI编写为可支持调用自己的功能。

  1. 安放好前面版上的输入控件和显示控件(确保他们都有合适的表示方式),通过右键点击前面版右上角的图标和选择Show Connector Pane来设置连接版。
  2. 通过选择 File»VI Properties»Execution»Reentrant execution. 
     来将VI设置为可重入。
  3. 在VI的程序框图中,当前VI的一个拷贝必须在运行时调用Call Reference Node。首先,打开函数选版,选择Application Control»Open VI Reference。将递归VI路径连上,并将options的输入设置为8,这样可以使通过引用调用可重入VI有效。
  4. 在Open VI Reference图标中的type specifier VI refnum 中点右键,然后点击 create»constant。在已经创建的常量上点右键,选择 Select VI Server Class»Browse. 选择递归VI的位置,并选择OK。注意到类型标志常量的连接版现则已经表示了这个递归VI的连接版了。
  5. 将新打开的VI引用连接入位于Application Control»Call By Reference Node下函数版中的Call By Reference Node。并且将线将整个通过引用被调用的VI的输入和输出口都连好(根据您应用的具体情况)。
  6. 使用位于Application Control»Close VI Reference下的函数面板中的Close VI Reference来关闭VI的引用。
  7. 保证你的递归VI有一个退出情况。换句话来说,必须有些情况使这个VI只返回一个值,而不是再次调用自己。这个是最终的步骤,现在VI已经被配置为可进行递归了。


阶乘例子
打开附带在下面的factorial.vi,它是一个递归VI的例子。运行整个VI,然后就能得到输入整数的阶乘结果了。



相关链接: KnowlegeBase 2QKDG7DW: Differences Between Reentrant VIs, VI Templates, and Dynamic VIs

附件:


factorial.vi - factorial.vi



报告日期: 02/15/2007
最近更新: 10/08/2007
文档编号: 46EKS80E