sciLab euclidean gcd算法具有额外的步数

时间:2014-12-08 18:00:06

标签: scilab

我想制作欧几里德算法程序pro sciLab。它还必须返回计算最大公约数所需的步数。这是代码:

funcprot(0)
function [erg]= Euclid(a,b)
    erg=[0 0];
    count =0 ;
   if( b == 0)
      count=count+1
      ggt = a

       else
      count=count+1
      ggt= Euclid(b, modulo(a, b))        
end
erg(1)(1) = count
erg(1)(2) = ggt
endfunction

但是出现了错误:

-->Euclid(12,10)
 !--error 15 
Submatrix not correctly defined.
at line      33 of function %s_i_s called by :  
at line      13 of function Euclid called by :  
at line      10 of function Euclid

那里可能出现什么问题?任何想法都表示赞赏。

1 个答案:

答案 0 :(得分:0)

如果不检查函数的真正含义,则会出现2个语法错误,从而导致出现以下问题: 1.索引矩阵必须以erg(i,j)而非erg(i)(j)的形式完成。但是在你的情况下,因为erg是一个向量(一行矩阵),你可以省略行索引,只使用erg(j)。 2.在if结构中,一旦ggt是标量(有1个元素),否则它是一个向量(有2个元素)。如果要将值放入erg(2),则必须索引erg以选择要使用的元素:

function [erg]= Euclid(a,b)
  erg=[0 0];
  count =0 ;
  if( b == 0)
    count=count+1
    ggt = a   //here ggt has 1 element only!
  else
    count=count+1
    ggt= Euclid(b, modulo(a, b))  //here ggt has 2 elements!
  end

  erg(1) = count    //or erg(1,1) if you like
  erg(2) = ggt(1)   //or erg(1,2), and you have to index ggt to choose which element to use
endfunction