Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.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
Java 递归(返回语句)_Java_C++_Recursion - Fatal编程技术网

Java 递归(返回语句)

Java 递归(返回语句),java,c++,recursion,Java,C++,Recursion,在java中使用递归解决codeforces中的问题时,我遇到了一个问题 package codeforces; import java.util.Scanner; public class NewClass11 { static int solve(int x, int y, int count) { if (x > y) { return count; } else { c

在java中使用递归解决codeforces中的问题时,我遇到了一个问题

package codeforces;
import java.util.Scanner;
public
class NewClass11 {
    static int solve(int x, int y, int count)
    {
        if (x > y) {

            return count;
        }
        else {
            count++;
            x = x * 3;
            y = y * 2;
            solve(x, y, count);
        }
        //here return statement required
    }
public
    static void main(String[] args)
    {
        Scanner ob = new Scanner(System.in);
        int x = ob.nextInt();
        int y = ob.nextInt();
        int count = 0;
        System.out.println(solve(x, y, count));
    }
}
IDE想在解决方法的最后括号中给我一个返回语句,但是为什么这不像C++代码那样工作?请给我另一个建议

<>但是如果我用C++编写代码,效果很好。 这里C++代码:

#include <iostream>
using namespace std;
int solve(int x, int y, int count)
{
    if (x > y) {
        return count;
    }
    else {
        count++;
        x = x * 3;
        y = y * 2;
        solve(x, y, count);
    }
}

int main()
{
    int x, y;
    cin >> x >> y;
    int count = 0;
    cout << solve(x, y, count);
}
#包括
使用名称空间std;
整数解算(整数x,整数y,整数计数)
{
如果(x>y){
返回计数;
}
否则{
计数++;
x=x*3;
y=y*2;
求解(x,y,count);
}
}
int main()
{
int x,y;
cin>>x>>y;
整数计数=0;
库特
<>但是为什么这不是像C++代码那样工作?< /P>

因为C++与java不同。 <>这一点的不同之处在于C++不要求非空函数的所有分支都返回。所示C++程序是良好的,因此编译。相反,如果函数执行到最后一个卷曲括号而没有返回语句,程序的行为是未定义的。

C++代码,运行良好 <>它没有“工作得很好”。C++程序的行为是未定义的。< /P> 任何值得使用的编译器都会对这种情况发出警告。默认情况下,GCC、Clang和MSVC会对显示的程序发出警告

请给我另一个建议

没有“另一种方法”。按照IDE的建议,通过添加缺少的return语句来修复程序

<>但是为什么这不是像C++代码那样工作?< /P>

因为C++与java不同。 <>这一点的不同之处在于C++不要求非空函数的所有分支都返回。所示C++程序是良好的,因此编译。相反,如果函数执行到最后一个卷曲括号而没有返回语句,程序的行为是未定义的。

C++代码,运行良好 <>它没有“工作得很好”。C++程序的行为是未定义的。< /P> 任何值得使用的编译器都会对这种情况发出警告。默认情况下,GCC、Clang和MSVC会对显示的程序发出警告

请给我另一个建议


<> P>没有“另一种方式”。通过添加缺省返回语句来修复程序,如IDE中所建议的。< /P> <代码>返回解决(x,y,计数)< /C> >在递归方法中。java强制编译此程序。C++只在编译时强制执行此项操作,而未定义的行为。因为当<代码>(x>y)时,是false,则该方法不返回任何东西,它需要返回一个<代码> int 。它与递归无关。java中的每一个方法都需要返回它所广告的东西。它会返回。C++代码可以编译,但它会给出错误的结果,因为它和java代码有相同的错误。只是C++接受。如果你在函数中没有明确地使用<代码>返回<代码>,它应该返回一个<代码> nt<代码>,然后默默地返回一些无效的东西…哇,17列深缩进:但是,如果我用C++编写代码,那就很好。-或者你相信。你的C++代码在执行代码时调用了<代码>中的未定义的行为。其中条件
(x>y)
为false。这似乎在您使用的任何配置/工具链中都有效,这只会助长您的误导。代码是错误的。
solve
中采用的并非所有代码路径都提供正确的
返回
结果。
返回求解(x,y,count)在你的递归方法中,java强制执行这个。C++只在编译时部分地执行这个,你在未定义的行为中有什么。因为当<代码>如果(x> y)是false,则该方法不返回任何东西,它需要返回一个<代码> int 。它与递归无关。java中的每一个方法都需要返回它所广告的东西。它会返回。C++代码可以编译,但它会给出错误的结果,因为它和java代码有相同的错误。只是C++接受。如果你在函数中没有明确地使用<代码>返回<代码>,它应该返回一个<代码> nt<代码>,然后默默地返回一些无效的东西…哇,17列深缩进:但是,如果我用C++编写代码,那就很好。-或者你相信。你的C++代码在执行代码时调用了<代码>中的未定义的行为。其中条件
(x>y)
为false。无论您使用何种配置/工具链,这似乎都会起作用,这只会助长您的误导。代码是错误的。
solve
中采用的并非所有代码路径都能提供正确的
返回结果。