zoukankan      html  css  js  c++  java
  • Wrong Answer,Memory Limit Exceeded

    错误原因:

    1.在递归的时候,递归函数中忘记加返回return。


    1.1做题时遇到一个奇葩错误,把它记到这里,看代码:

    代码1:错误,用c++提交wrong answer,但是用g++提交却accepted

    int set_find(int d)
    {
    	if(set[d]<0)
    		return d;
    	set_find(set[d]);//这里递归时没有返回值,只有在结束条件时返回(即最后一层递归有返回值,前面的没有返回值)
    }

    上述代码在进行递归的时候,只有在递归结束时的最后一层返回一个值d,但是并没有把值带到前面的递归当中。

    但是在vc中却运行正确,似乎自动加了个返回return(见下面正确代码2)。

    这可能与编译器有关,当时那道题我没加return,

    用c++提交wrong answer,但是用g++提交却accepted

    (当时就感觉还是自己的代码有问题,终于在仔细检查之后还是找到了这个错误,心情顿时就比较爽了)

    代码2:正确,用c++,g++提交均accepted

    int set_find(int d)
    {
    	if(set[d]<0)
    		return d;
    	return set_find(set[d]);
    }


    1.2  当时这道题其实是树中的并查集相关的题目POJ 1308 Is It A Tree? ,上述代码没有用并查集,

    我把它改成并查集后,测试了下这个错误,同样是在vc中运行正确,似乎自动加了个返回return。

    在提交时却出现了:

    用c++提交Memory Limit Exceeded,但是用g++提交却accepted

    为什么出现了Memory Limit Exceeded,什么原因我也不确定,在这先记下。

    但是可以看出忘记加return的话,在运行的时候的确与编译器有关,因此要写正确代码最重要,以防出现莫名其妙的错误。

    代码1:错误,用c++提交Memory Limit Exceeded,但是用g++提交却accepted

    int set_find(int d)
    {
    	if(set[d]<0)
    		return d;
    	set[d]=set_find(set[d]);//这里递归时没有返回值,只有在结束条件时返回(即最后一层递归有返回值,前面的没有返回值)
    }

    代码2:正确,用c++,g++提交均accepted

    int set_find(int d)
    {
    	if(set[d]<0)
    		return d;
    	return set[d]=set_find(set[d]);
    }

    警告自己:因此,在写代码时碰到某个编译器过不了的时候,考虑一下是不是自己代码的错误呢。因为某些小错误有些编译器会自动更正,而某些编译器却不能改正。

    写代码还是正确最重要啊,不要光依靠编译器的自动更正。更不要责怪某个编译器不能检查到这个错误,毕竟编译器也不是万能的!

  • 相关阅读:
    Nodejs下载和第一个Nodejs示例
    永久关闭Win10工具栏的TaskbarSearch控件
    对称加密,非对称加密,散列算法,签名算法
    【转】TTL和RS232之间的详细对比
    zlg核心板linux系统中查看系统内存等使用信息
    Power BI后台自动刷新数据报错 The operation was throttled by Power BI Premium because there were too many datasets being processed concurrently.
    剪切板和上传文件内容获取
    CSS, LESS, SCSS, SASS总结
    文字程序
    electron 打包“ERR_ELECTRON_BUILDER_CANNOT_EXECUTE”
  • 原文地址:https://www.cnblogs.com/gongpixin/p/4477412.html
Copyright © 2011-2022 走看看