我想制作欧几里德算法程序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
那里可能出现什么问题?任何想法都表示赞赏。
答案 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