Part I : Handson
各位安装LabVIEW2009的同学请跟我做以下动作:
1:打开LabVIEW 2009.
[](https://f2gz7g.bay.livefilestore.com/y1mJf781TsQY2lMDPJPSS-Ciy9j5BqCKwwYq4up4HegzWdSPRRoK9XmPUSm0MhcjjsGdO3yBFl5o2ZUoHcAEFlDD9Idvou3kEx52H_zGgNN4Qq5OZzivi1JsoCTqmPU_J_g-6lkWGxiRub0O8NdLW8Kxw/image2 7AFEC386.png)
2:Ctrl+N
[](https://f2gz7g.bay.livefilestore.com/y1mqUA4E2HIjdW9Gb3BZtx2IS9OvqufNm9ay5c3yoX7YyZtiExwtvNyKY6zO4IzSS5_hYD1H1mT82bnVU8GrzxlS_AzTvrzEsxkIBloXGJEeXVT03GQDPTy5-7VXeuYh0kU6fKN5Cf7WXnw8gIPYYITWQ/image8 2D5308B1.png)
3:Ctrl+I,按下图配置
4:Ctrl+E,选择程序框图,将图标拖到程序框图
5:Ctrl+R,然后稍等5分钟:
恭喜你编写了第一个递归VI并且让他挂掉了。
** Part II : Basic I**
好,我们来玩点实在的,先看看LabVIEW 的例程:
在LabVIEW以前的版本只有类才能使用递归,不过现在已经比较成熟,普通的VI也可以递归了。
注意事项正如图中注释,我就不多废话。
Part III : Basic I
为了更详细的演示递归,我们请出教科书里的经典例程汉诺塔。
首先附赠一个汉诺塔小游戏:
附赠小游戏汉诺塔下载:
#include <stdio.h> void hano(int n,char a,char b,char c) { if(n==1) printf("t将%d个盘片从%c移动到%cn",n,a,c); else { hano(n-1,a,c,b); printf("t将第%d个盘片从%c移动到%cn",n,a,c); hano(n-1,b,a,c); } } main() { int n; printf("输入将要移动多少个盘子n:"); scanf("%d",&n); printf("递归结果:n"); hano(n,'x','y','z'); }
然后我们来看看LabVIEW里面如何实现这个算法:

主程序调用算法,然后演示步骤。
递归调用算法。
当然不要忘记设置退出递归的条件。
源代码下载
Part IV : Advance I
到底递归有什么用呢?我们来看一个实用一点的工具:VI图标提取器
主程序:
递归代码
源目录
输出目录
Part V : Advance II
另外程序里附赠了一个利用LabVIEW自带的枚举函数写的同功能VI,大家可以看看,这个是可以枚举llb的。
最后总结一下递归要注意的事项:
1:真的有必要用递归么?
2:你的程序能否正常退出递归?
3:递归的过程是无法直接调试的,有没有好的办法保证VI按照我们的预期执行?
如果这三个问题都能保证,恭喜你,你可以使用递归来提高你程序的效率了。