Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 乘2个自然数的思维方式(问题解决”;)_Algorithm - Fatal编程技术网

Algorithm 乘2个自然数的思维方式(问题解决”;)

Algorithm 乘2个自然数的思维方式(问题解决”;),algorithm,Algorithm,证明以下递归算法的正确性,即对所有整型常数c乘以两个自然数≥ 二, function multiply(y,z) comment Return the product yz. 1. if z = 0 then return(0) else 2. return(multiply(cy, z/c) + y · (z mod c)) 我在“算法设计手册”中看到了这个算法。 我知道它为什么工作正常,但我想知道这个算法是如何产生的。这是把两个自然数乘以常数c的好方法吗 当c是表示法的基础(如十进制)时,

证明以下递归算法的正确性,即对所有整型常数c乘以两个自然数≥ 二,

function multiply(y,z) comment Return the product yz.
1. if z = 0 then return(0) else
2. return(multiply(cy, z/c) + y · (z mod c))
我在“算法设计手册”中看到了这个算法。
我知道它为什么工作正常,但我想知道这个算法是如何产生的。这是把两个自然数乘以常数c的好方法吗

当c是表示法的基础(如十进制)时,这就是“手动”进行乘法的方式。这是最重要的。 在c-基中,y向左侧移动一次(即在右侧添加一个零);z/c是z向右移一次:最右边的数字丢失。 丢失的数字实际上是z模c,它分别乘以y

这里是一个c=10的例子,其中撇号表示递归调用中变量的值。 我们对z的每一个独立数字(用z mod c检索)执行与y的乘法。以这种方式找到的每一个下一个产品都会再向左移动一个位置。通常,0不会填充在此移位乘积的右侧,但默认为:

    354    y
   x 29    z
   ----
   3186    y(z mod c) = 354·9 = 3186
 + 708     y'(z' mod c) = yc(z/c mod c) = 3540·2 = 7080
 ------   
  10266

因此,该算法仅依赖于给定c-基中“移位和加法”方法的数学基础。

你的问题是什么?如何提出这样的算法,y和z最初在问题中,但是考虑到解中的常数c,它与简单地将两个数字直接相乘的程序形成对比。如何提出这样的算法,y和z最初在问题中,但考虑到解中的常数c,这就是当c=10时,用铅笔和纸乘以多位数的方法