关于 matlab 函数递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于 matlab 函数递归相关的知识,希望对你有一定的参考价值。

我写了一个求图像连通域的算法,用到递归,如果对小一些的图,可以完成,比如30*30的,如果大了576*768的就会报错, ??? Maximum recursion limit of 500 reached. Use set(0,'RecursionLimit',N) to change the limit.Be aware that exceeding your available stack space can crash MATLAB and/or your computer. 我将递归次数设置到5000,matlab就会关闭,但是计算576*768的图,大概要 400,000次递归,这怎么办? 有没有成熟的快速求图像中连通域的算法,并分别保存起来(如求图片中封闭不规则图形的面积)?

参考技术A 如果要求连通区域的话有个命令叫bwlabel的,不过它处理的是二值图像,如果是灰度图的话需要自己先预处理一下。
楼主可以看一下下面的例子(这是label2rgb函数帮助里的一个例子)
I
=
imread('rice.png');
imshow(I),figure,
title('original
image')
BW
=
im2bw(I,
graythresh(I));
L
=
bwlabel(BW);
RGB
=
label2rgb(L);
RGB2
=
label2rgb(L,
'spring',
'c',
'shuffle');
imshow(RGB),
figure,
imshow(RGB2)

关于回调和递归思想的理解

1) 面向过程的递归思想在面向对象的编程世界中的递归调用就是回调思想。它们两个的区别就是多了一个封装了方法和属性的对象。回调函数实参传递的是一个函数的指针,其实递归调用也是用函数的相同地址进行递归循环处理数据的。递归函数的原理就是函数的参数值不断地变化,从而不断的重新回到函数的起始地址处根据传递的参数值不断地处理数据。回调函数的原理就是把函数当做一个可以传递的实参赋值给自定义的回调函数的形参,实际传递的是定义函数的地址。

a) 理解回调函数最好把函数和类型对象相当,因为他们都是数据变量的集合,都是赋值语句键值对(key-value)的集合。对象的属性具有初始值,函数的作用就是通过赋值语句对对象的属性进行赋值,从而达到处理数据的效果。

b) 递归和回调的可读性不好,其实循环就是封装了递归操作,增加了代码的可读性。

c) 一般能用循环操作数据集合的操作就不要用递归。

d) 对于底层的代码设计思想还是需要理解,但是编程中是否使用需要自己衡量是否使代码的质量和编程效率得到提高。 

2) 我们可以理解方法函数就是类的子集,因为类就是由属性和访问属性的方法(访问器子程序)组成。

a) 我们一般称被封装好的类库的处理数据的方法为函数。

b) 自己定义的为方法。

c) 方法就是变量的集合,这里的变量可以看做为方法的属性,因此方法和类同一性质的编程单位。它们的区别就是作用域的大小的问题。

d) 方法中的形参和实参的区别就是key和value的区别,像类的属性和属性值也同理,它们都是键值对模型(key-value)。

3) Js中的闭包和Java中的静态变量和全局变量是有异曲同工之妙,都是增长了局部变量的生命周期。

a) Java中的局部静态变量的作用域是限制在局部的方法块中,但是方法块调用结束之后局部静态变量不会释放内存。静态变量的生命周期和类的生命周期是一样的,当虚拟机的类加载器(ClassLoader)加载类的时候就会给类的静态变量分配内存。

b) Java 中的局部静态变量的生命周期属于类的生命周期,但是它的作用域是在方法的代码块之内的。

c) JavaScript中的闭包的作用就是增长了局部变量的生命周期,同时也扩大了方法内部局部变量的作用域。Js的闭包和Java中全局变量类似。

注: Js是动态弱语言,所以它的语法很松散,变量的类型可随意涂抹擦除。程序员的编码水平就会决定Js代码的泛滥程度。

a) JavaScript的特点就是把像Java中的属性(attr)和方法(fn)统称为对象,JavaScript中一切皆对象。

b) Js是基于函数式的编程,它的数据表示方式是JSON,除此之外都是以function的形式组织数据。

c) 理解key-value的数据存储模型对学习Js有莫大的帮助。就如上所述,Js中变量的类型可以随便擦除,键key可以是方法也可以是对象属性。

4) 一个人想要独立地生存下去,只有不断地自我更新,民族亦然。

a) 更新和删除是有天壤之别的。

以上是关于关于 matlab 函数递归的主要内容,如果未能解决你的问题,请参考以下文章

请教关于Matlab中ikine函数

matlab关于fsolve函数

好吧,我有一个关于 MySql 中的递归的问题,关于创建递归阶乘函数。它给了我错误1424:

matlab问题,关于unique函数

matlab问题,关于unique函数

关于matlab的imread函数