BInary Eucledian算法进入无限循环

时间:2017-03-24 10:43:18

标签: matlab infinite-loop modular-arithmetic

我在matlab中实现了二元eucledian算法,这里是代码

 a=27;
b=36;
d=EuclidBinary(a,b)

d =

     9

然后我输入了以下数据

a=36;
b=28;
d=EuclidBinary(a,b)
Out of memory. The likely cause is an infinite recursion within the program.

Error in EuclidBinary (line 16)
         d=EuclidBinary(fix(abs(a-b)/2),b);

它工作正常,但是当我更改为以下数据时

$ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiHost);
    curl_setopt($ch, CURLOPT_POST, count($apiData));
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($apiData));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/json'));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $jsonData = curl_exec($ch);
    curl_close($ch);

我已开始调试,如果我按照说明操作,那么我将

d = 2 * EuclidBinary(A / 2,B / 2);第一次打电话(a = 18,b = 14) 对于第二个相同  d = 2 * EuclidBinary(A / 2,B / 2); (A = 9,B = 7)

我们有第三种情况 a = 1 b = 7 并且通常程序重复这些值无限次,我使用下面的伪代码 enter image description here

请帮我解决这个问题

2 个答案:

答案 0 :(得分:2)

此算法(来自邮件底部的打印屏幕)似乎有缺陷。让我们看看如果a = 1且b = 7:

会发生什么
b

所以问题不在您的代码中,而是在您使用的算法中。它只是通过这个输入进入无限循环。

我认为错误发生在第4步。请参阅following link。 在您的问题中,步骤4在每种情况下都有path1作为其第二个参数,而在我给出的链接中,第二个参数由某些条件决定。另请注意,有第5步。

答案 1 :(得分:1)

您的算法存在错误。见Binary GCD Algorithm。 a和b都是奇数的最后一种情况应该区别对待:

hdfs dfs -mkdir /home/`date +%Y%m%d`