C++ 如何证明以下算法的正确性?

C++ 如何证明以下算法的正确性?,c++,algorithm,C++,Algorithm,我需要证明下面的算法是正确的,我知道归纳法,但不知道如何在这里使用它?我也很乐意知道算法的复杂性,它有多优化? 什么是跑步时间?请帮帮我 #include <cstdlib> #include <iostream> #define c 2 //we should take c more ot equal then 2 using namespace std; int multiply(int y,int z){ // product yz if(

我需要证明下面的算法是正确的,我知道归纳法,但不知道如何在这里使用它?我也很乐意知道算法的复杂性,它有多优化? 什么是跑步时间?请帮帮我

#include <cstdlib>
#include <iostream>
#define c 2
//we should take c   more ot equal  then 2
using namespace std;
int multiply(int y,int z){
      // product yz
    if(z==0) return 0;
    return (multiply(c*y,int(z/c))+y*(z %c));
}

int main(int argc, char *argv[])
{
    int y=5;
    int z=7;
    cout<<multiply(y,z)<<endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}
#包括
#包括
#定义C2
//我们应该取c大于等于2
使用名称空间std;
整数乘法(整数y,整数z){
//产品yz
如果(z==0)返回0;
返回(乘法(c*y,int(z/c))+y*(z%c));
}
int main(int argc,char*argv[])
{
int y=5;
int z=7;

不能为一次迭代提取一个公式。然后证明它为n=1,n=2,…然后证明步骤n=>n+1。,如果你不知道怎么做,在
z=0
中询问1)你的函数显然是正确的

2) 假设
乘(x,y)
0返回
x*y
  • 我不会使用“*”运算符

    乘(c*y,int(z/c))+y*(z%c)

  • 应该是

    multiply(multiply(c,y),int(z/c))+multiply(y,(z %c))
    
  • 正如Josep提到的,使用“*”运算符进行计算,并使用ur multiply()进行计算。将结果与精度级别进行比较
  • 用于获取时间运行。在执行main方法中的time方法之前。调用

    时间\u t开始时间=时间(空);
    因为这是一个家庭作业,我只想给你一些提示

    首先,函数中有一个
    if
    。 在z=0的情况下,证明正确性是微不足道的

    接下来,如果z>0,则需要检查两件事:

    首先,不变量:您必须检查,假设乘法在递归调用中正确工作,返回的值确实是两个数字的乘积

    第二:你必须证明这个函数最终会返回,也就是说,不管你给出什么数字,最终你都会到达函数不再递归调用自己的点。这方面的一个提示:看看参数的二进制表示,以及乘二和除二对它有什么影响


    在这一点上,也应该很容易确定算法的复杂性。

    那么,算法应该做什么?两个整数的乘法是家庭作业吗?家庭作业中给出了算法吗?还是由您设计的?只需比较乘法的结果(y,z)使用y*z。如果一组测试的结果相等,则该算法运行良好。@JosepRodríguezLópez:你是否建议他寻找所有可能的y,z值?为了证明该算法运行良好,他需要一个正式的证明或检查所有可能值的结果,这实际上是不可能的。这更多的是一个评论,而不是一个答案。
     我知道归纳法,但不知道如何在这里使用它
    表明@dato知道归纳法是如何工作的,他应该寻找什么,他正在寻找能让他证明算法正确性的说法。
    multiply(multiply(c,y),int(z/c))+multiply(y,(z %c))