我需要解决什么才能使代码编译?

问题描述 投票:-4回答:2

用递归方法编写一个Java程序,该方法接受值i作为输入并计算总和:

 m(i) = 1/3 + 2/5 + 3/7 + 4/9 + 5/11 + ... + i/(2i + 1)

到目前为止,我有:

import java.util.Scanner;

public class Recursion {
    public static void main(String[] args) {
        Scanner sc= new Scanner(System.in);
        System.out.println("Enter an i: ");
        int i = sc.nextInt();
        if (i == 0) {
            System.out.println(0);
        }
        else {
            System.out.println(i / (2 * i + 1) + (main(i-1)));
        }
    }
}

代码未编译。请帮忙!

java terminal
2个回答
0
投票

您不应该在main函数上使用递归。只需创建一个不是main的第二个函数,它就可以工作:

import java.util.Scanner;

    public class Recursion {
        public static void main(String[] args) {
            Scanner sc= new Scanner(System.in);
            System.out.println("Enter an i: ");
            int i = sc.nextInt();
            System.out.println(recursion(i));
        }

        public int recursion(int i){
            if (i == 0) {
                return 0;
            }
            else {
                return (i / (2 * i + 1) + (recursion(i-1)));
            }
        }
    }

0
投票

好吧,我想我终于明白了您要做什么!问题是您实际上正在尝试构建字符串!该方法正在做应做的事情,您的回报实际上并没有真正在做应做的事情。

import java.util.Scanner;

public class Recursion
{
    private static String result = null;

    public static void main(String[] args)
    {
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter an i: ");
        int i = sc.nextInt();
        System.out.println(recursion(i));
    }

    public static String recursion(int i)
    {
        if(i != 0)
        {
            if(result == null)
            {
                result = (i + "/" + (2 * i + 1));
                recursion(i - 1);
            }
            else 
            {
                result = result.concat(" + ").concat(i + "/" + (2 * i + 1));
                recursion(i - 1);
            }
        }
        return result;
    }
}

请让我知道这是否满足您的要求!

© www.soinside.com 2019 - 2024. All rights reserved.