как ответить на этот вопрос рекурсии и есть ли большая разница между ним и циклом

Не уверен, что вы ищете, но вы можете добавить JMenuBar в JFrame - JFrame.setJMenuBar () . Подробнее см. Как использовать меню .

Редактировать:

Ниже приведен слишком упрощенный пример неупорядоченного фрейма с меню, просто для демонстрации идеи.

Вы можете обратиться к существующим решениям - для этой цели JIDE имеет ResizableFrame. Это часть открытого источника JIDE-oss . Вещество L & amp; F поддерживает настройку заголовка (см. Что случилось с веществом LaF? ). Вы также можете очень эффективно использовать классы ComponentMover и ComponentResizer by @camickr, см. Статью Resizing Components для более подробной информации.

import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class UndecoratedFrameDemo {
    private static Point point = new Point();

    public static void main(String[] args) {
        final JFrame frame = new JFrame();
        frame.setUndecorated(true);
        frame.addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                point.x = e.getX();
                point.y = e.getY();
            }
        });
        frame.addMouseMotionListener(new MouseMotionAdapter() {
            public void mouseDragged(MouseEvent e) {
                Point p = frame.getLocation();
                frame.setLocation(p.x + e.getX() - point.x,
                        p.y + e.getY() - point.y);
            }
        });

        frame.setSize(300, 300);
        frame.setLocation(200, 200);
        frame.setLayout(new BorderLayout());

        frame.getContentPane().add(new JLabel("Drag to move", JLabel.CENTER),
                BorderLayout.CENTER);

        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("Menu");
        menuBar.add(menu);
        JMenuItem item = new JMenuItem("Exit");
        item.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                System.exit(0);
            }
        });
        menu.add(item);
        frame.setJMenuBar(menuBar);

        frame.setVisible(true);
    }
}

0
задан Amro Okasha 17 January 2019 в 13:42
поделиться

3 ответа

Вы забыли последнее " напечатайте значение N оператора.

Скажем, мы вызываем это с Exercise(1). Тогда это означает, что оно оценивается как:

[110 ]

этот вызов Exercise(2) приведет к:

Exercise(2):
    print 2
    Exercise(2+1)
    print 2

вызов Exercise(3) приведет только к двум операторам print, поскольку условие в выражении if ложно, следовательно, :

Exercise(3):
    print 3
    print 3

Если мы теперь выполним подстановку, мы получим:

Exercise(1):
    print 1
        print 2
            print 3
            print 3
        print 2
    print 1

, который действительно даст ожидаемую последовательность.

0
ответ дан Willem Van Onsem 17 January 2019 в 13:42
поделиться

Для N = 1

print 1;
if(N<3) --> Exercise (1+1);  //the condition is TRUE here. So the function will be called again for N=2
print 1;

Для N = 2

print 2;
if(N<3) --> Exercise (2+1); // Condition is again TRUE. So the function is called for N=3 
print 2;

Для N = 3

print 3;
if(N<3) --> Exercise (3+1); // Condition is FALSE here. So the function won't be called
print 3;

Структура будет похожа на [117 ]

print 1;
  print 2;
    print 3;
    print 3;
  print 2;
print 1;
0
ответ дан some IT dood 17 January 2019 в 13:42
поделиться

Когда я хочу знать, что делает алгоритм, я часто кодирую и выполняю его. Вставка операторов print для отслеживания выполнения и потока данных помогает показать иерархию вызовов.

indent = ""

def exercise(n):
    global indent
    indent += "  "
    print(indent, "ENTER", n)

    # Original assignment, with assigned output not indented
    print("REAL", n)
    if n < 3:
        exercise(n+1)
    print("REAL", n)

    print(indent, "LEAVE", n)
    indent = indent[2:]

exercise(1)

Вывод: здесь трассировка выполнения с выводом присваивания, помеченным как «REAL». Функции входа и выхода являются торговыми и с отступом.

   ENTER 1
REAL 1
     ENTER 2
REAL 2
       ENTER 3
REAL 3
REAL 3
       LEAVE 3
REAL 2
     LEAVE 2
REAL 1
   LEAVE 1

Да, это легко сделать с помощью пары петель. Является ли это «большой разницей», зависит от вашей оценочной функции. Например:

for i in range(1, n+1):
    print(n)
for i in range(n, 0, -1):
    print(n)

Если ваша обработка отдельного случая тривиальна (например, print(n)), то это легко. Когда ваша итерация от одного элемента к следующему тривиальна (например, n+1), тогда это легко. Однако, когда любой из них является сложным, тогда рекурсия часто является более подходящим способом описания и реализации процесса.

0
ответ дан Prune 17 January 2019 в 13:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: