20-matlab全排列-函数调用

matlab中global的用法

Matlab 中子函数不传参直接调用主函数global变量方法  
在一个m文件里要调用一个函数(自定义的),但是我希望这个函数能利用并修改workspace中的变量(m文件中的),可是函数的变量全是局部的,无法修改工作区的变量,该怎么办?

同时在“函数(自定义的)”和m文件中需要使用修改的变量申明为全局变量就可以了。就是变量前面加GLABAL
例如:
main.m
clc;clear

global Mat1

Mat1=5;
b=add(3);

子函数 add.m
function sum=add(x)
global Mat1;
sum=Mat1+x;

输出结果: b=8

使用golbal的优点:

1 传递大数据的参数
  如果通过函数传参数的方式的话,系统会浪费过多的时间在复制数据的时间上,如果采用global的方式共享数据的话代码的效率会大大提高

2 过多的常量需要传递
  如果每个量都作为函数函数的参数传递的话,代码参数列表就很长,如果采用global的话代码的可读性提高,函数调用也方便
---------------------
全排列函数:1到4的全排列

y_quanpailei.m:
function y_quanpailei(ct)
    global ans1 a visit;
    if ct == 4
        a
        ans1 = ans1 + 1;
        return
    end
    for i = 1:4
        if visit(i) == 0
            a(ct+1) = i;
            visit(i) = 1;
            y_quanpailei(ct + 1);
            visit(i) = 0;
        end
    end
end

 test.m

clc;
clear;
global ans1  a  visit;
ans1 = 0;
a = zeros(1,4);
visit = zeros(1,4);
y_quanpailei(0)
ans1

  

原文地址:https://www.cnblogs.com/zhumengdexiaobai/p/10739443.html