大型的labview程序实例_以实例学LabVIEW编程,递归VI程序也非常简单

在上篇文章:LabVIEW编程实例:计算阶乘,学习for循环+移位寄存器+递归调用,通过一个求阶乘的例子已经演示了LabVIEW中基本递归VI程序的实现方法,但有很多小伙伴还是不太明白,下面再通过一个具体的例子给大家讲解一下其实现方法,加深LabVIEW中递归VI程序的理解。

例子说明

这儿以斐波那契数列(Fibonacci sequence)进行说明。斐波那契数列又称黄金分割数列,它是以兔子繁殖为例而引入的一个序列,所以又称为“兔子数列”,相信很多小伙伴在学C语言编程练习递归算法的时候应该接触过这个数列,这个数列在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。

在数学上它以递归的方式进行定义,指这样的一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144……,即前两个数为分别为0和1,从第3项开始,每项的值都等于其前两项之和。斐波那契数列Fib(n)用公式表示为:

Fib(n) = Fib(n-1) + Fib(n-2),其中,Fib(0) = 0,Fib(1) = 1

下面看下在LabVIEW中如何编写递归VI实现求解斐波那契数列Fib(n)中第n项的值。

LabVIEW中递归VI程序的特点

在讲具体的编程实现之前,大家应该先知道LabVIEW中递归VI的基本特点。

根据递归VI的定义,即程序在运行过程中能够调用自己的这样的VI就是递归VI程序,所以,对于递归VI程序,其特点包括以下几个方面:

(1) 首先它是一个子程序,所以程序功能完成后,要定义其图标/连接口,使其能作为子程序被调用;

(2) 在程序实现过程中,要能够动态调用自身,在LabVIEW编程环境中可通过VI引用动态调用及VI属性设置为可重入实现;

(3) 作为递归VI,要有使递归调用能够终止的条件,不能陷入无限调用的死循环中。

斐波那契数列递归的程序实现

针对上面递归VI的特点,下面看下如何实现斐波那契数列中第n项值的求解编程。

在前面板上放置一个输入控件n、一个输出控件Fib(n),用以求解斐波那契数列中第n项的值Fib(n),两个控件的数据类型皆设置为U32类型,输入输出参数定义完成后,其前面板及图标/连接口区域如下图所示:

5162999715051b43efb12e4381f04293.png

首先,先将这个VI程序设置为可重入的类型,在LabVIEW菜单中选择“文件”---->“VI属性”弹出VI属性设置对话框,在“类别”下拉框中选择“执行”,然后设置“重入”方式为“共享副本重入执行”,如下图所示:

dc5760916f953c98774ab302227ce753.png

然后,编写程序代码,其程序框图如下图所示:

0229cd00b6f8018afa12c7b6bab0a033.png

在上面程序框图中,根据斐波那契数列的递归定义,先对输入的n值进行判断,当其为0和1时,Fib(n)的值分别输出0和1,当为其它值时,即选择结构的默认情况,其值为Fib(n-1)+Fib(n-2)。

在动态调用自身方面,使用“打开VI引用”和“通过引用调用”函数实现。

需要强调的是,在“打开VI引用”函数中,“选项”参数设置为8;“VI路径”参数设置为本VI所在的路径;“类型说明符”参数设置稍复杂些,先在这个参数上通过右键菜单创建一个常量,然后在这个常量的右键菜单中选择“选择VI服务器类”---->“浏览”,在弹出的文件选择对话框中选择当前VI即可,设置完成后,创建的常量外观自动变为如上面程序框图中所示的一输入一输出参数的样式。

成功打开VI引用后,通过两次调用“通过引用调用”函数中,分别计算Fib(n-1)和Fib(n-2)的值,然后将其相加即可得到Fib(n)的值。

Fib(0)=0和Fib(1)=1即为该程序递归的终止条件。

通过上面的程序就可求解斐波那契数列中任一项的值。

关于递归VI的总结

从上面的例子可以看出,对于递归VI总结如下:

(1) 递归VI就是在程序运行过程中能够调用自身;

(2) 在实现递归VI时,必须有一个明确的递归结束条件,不能使其陷入无限死循环中;

(3) 递归VI优点是在程序可读性上比较简洁明了,缺点是运行效率较低;

(4) 在递归调用过程中,会为每次调用的返回点、局部量开辟栈来存储,递归次数过多时容易造成栈溢出等缺点;

(5) 一般情况下,由于其运行效率的低效性,不建议过多使用递归VI程序。

如果你觉得这篇文章对你有用的话,关注+收藏+点赞吧。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第5页 1.2 labview2011新特性 第6页 1.3 安装labview 第11页 1.4 思考与练习 第12页 第2章 开始labview编程 第12页 2.1 启动labview 第13页 2.2 基本概念介绍 第13页 2.2.1 vi与子vi 第13页 2.2.2 前面板 第16页 2.2.3 后面板 第18页 2.3 菜单栏及工具栏 第18页 2.3.1 菜单栏 第19页 2.3.2 工具栏 第20页 2.4 设置个性化编程环境 第20页 2.4.1 工具选板 第22页 2.4.2 控件选板 第24页 2.4.3 函数选板 第24页 2.4.4 其他编程选项设置 第28页 2.5 vi的基本操作 第28页 2.5.1 vi的创建与编辑 第31页 2.5.2 vi的运行与调试 第33页 2.5.3 子vi的操作 第36页 2.6 获取labview帮助 第36页 2.6.1 即时上下文帮助 第36页 2.6.2 查找范例 第36页 2.6.3 在线帮助 第37页 2.7 综合实例:创建一个“虚拟信号源”程序 第39页 2.8 思考与练习 第40页 第3章 了解labview的数据类型 第40页 3.1 基本数据类型 第43页 3.1.1 数值型 第46页 3.1.2 布尔型 第46页 3.1.3 字符串型与路径 第47页 3.1.4 枚举型 第48页 3.1.5 簇 第48页 3.1.6 数组 第50页 3.2 特殊数据类型 第50页 3.2.1 波形数据 第50页 3.2.2 时间标识 第51页 3.2.3 变体 第51页 3.3 数据类型之间的转换 第51页 3.3.1 不同数字类型之间的转换 第53页 3.3.2 数字/字符串转换 第56页 3.3.3 字符串/数组/路径转换 第57页 3.3.4 布尔值/数字值转换 第58页 3.3.5 数字与时间标识的转换 第59页 3.4 数据运算与操作 第59页 3.4.1 基本数运算与操作 第61页 3.4.2 字符串运算与操作 第64页 3.4.3 布尔运算与操作 第65页 3.4.4 比较运算 第69页 3.4.5 数组与矩阵操作 第74页 3.4.6 簇操作 第76页 3.4.7 波形数据操作 第77页 3.5 综合实例:温度报警装置 第78页 3.6 思考与练习 第79页 第4章 数据表达与显示 第79页 4.1 基本数据表达与显示 第79页 4.1.1 数值型数据的表达与显示 第87页 4.1.2 布尔型数据的表达与显示 第91页 4.1.3 字符型数据的表达与显示 第94页 4.2 二维图形 第94页 4.2.1 波形图与波形图表 第105页 4.2.2 xy图和express xy图 第106页 4.2.3 强度图表与强度图 第107页 4.2.4 数字波形图和混合波形图 第109页 4.3 三维图形 第110页 4.3.1 三维曲面图 第112页 4.3.2 三维参数图 第113页 4.3.3 三维曲线图 第113页 4.4 其他图形显示控件 第114页 4.4.1 极坐标图 第115页 4.4.2 最小-最大曲线显示控件 第116页 4.5 综合实例:绘制同心圆 第116页 4.6 思考与练习 第117页 第5 章程序结构 第118页 5. 1基本程序结构 第118页 5.1.1 for循环 第122页 5.1.2 while循环 第123页 5.1.3 顺序结构 第127页 5.2 特殊程序结构 第127页 5.2.1 条件结构 第130页 5.2.2 事件结构 第134页 5.2.3 定时结构 第138页 5.2.4 禁用结构 第140页 5.3 变量 第140页 5.3.1 局部变量 第142页 5.3.2 全局变量 第145页 5.3.3 共享变量 第146页 5.4 综合实例:等差序列求和 第147页 5.5 思考与练习 第148页 第6章 外部程序接口与扩展 第148页 6.1 dll调用 第152页 6.2 windows api调用 第156页 6.3 可执行程序的调用 第157页 6.4 activex调用 第166页 6.5 labview与matlab混合编程 第167页 6.6 综合实例:通过调用动态链接库实现驱动开发 第169页 6.7 思考与练习 第170页 第7章 数分析 第170页 7.1 基本数分析 第170页 7.1.1 初等与特殊函数 第172页 7.1.2 线性代数 第175页 7.1.3 微积分 第178页 7.1.4 多项式 第180页 7.2 数理统计与最优化问题 第180页 7.2.1 概率与统计 第181页 7.2.2 最优化 第184页 7.3 曲线拟合与插值 第184页 7.3.1 曲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值