递归函数打印正方形图案有什么新主意吗?

时间:2019-01-31 14:02:10

标签: java recursion

我有一个问题,我需要做一个递归函数来获取整数并做一个正方形的星形图案,例如如果我在函数中插入4,它将给我:

from PyQt5 import QtCore, QtGui, QtWidgets
import View
from PyQt5 import QtWidgets
import sys

#class Main(QtWidgets.QMainWindow, View.Ui_Form):
class Main(QtWidgets.QWidget, View.Ui_Form):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)
        self.setupUi(self)

        #FAZENDO LOGIN FICAR FIXO
        self.login_Checkbox.setChecked(True)
        self.login_Checkbox.stateChanged.connect(self.loginAlwaysChecked)
        # funcionando apenas um dos dois
        self.dahua_Checkbox.stateChanged.connect(self.DahuaChangeCheckBox)
        self.jufeng_Checkbox.stateChanged.connect(self.changeJFCheckBox)
        self.cam_Checkbox.stateChanged.connect(self.changeCamCheckBox)
        self.nvr_Checkbox.stateChanged.connect(self.changeNVRCheckBox)

        # botao de iniciar test inicia teste
        self.stop_flag = False
        if self.stop_flag == False:
            self.startTest_Btn.clicked.connect(self.threadRun)

    def loginAlwaysChecked(self):
        print("def loginAlwaysChecked(self):")
    def DahuaChangeCheckBox(self):
        print("def DahuaChangeCheckBox(self):")
    def changeJFCheckBox(self):
        print("def changeJFCheckBox(self):")
    def changeCamCheckBox(self):
        print("def changeCamCheckBox(self):")   
    def changeNVRCheckBox(self):
        print("def changeCamCheckBox(self):") 
    def threadRun(self):
        print("def threadRun(self):") 


def main():
    app = QtWidgets.QApplication(sys.argv)
    form = Main()
    form.show()
    app.exec_()


if __name__ == '__main__':
    main()

因此,我进行了递归操作,我想将我的想法缩小为一个函数,您可以建议改善我的设计,谢谢。

****
****
****
****

3 个答案:

答案 0 :(得分:3)

您可以取消SetCount方法和第二个if检查,这样也可以:

static int count = 0;

public static void rect(int num) {
    if (count <= 0)
        return;
    for (int i = 0; i < num; i++) {
        System.out.print('*');
    }
    System.out.println();
    count--;
    rect(num);
}

public static void main(String[] args) {
    count = 4;
    rect(count);
}

答案 1 :(得分:1)

import java.util.*;
import java.lang.*;
import java.io.*;

class Check{

 static void rect(int num,int count){
    if(count<=0)
        return;
    if(count !=0 && num>0){
        for(int i =0; i<num;i++){
            System.out.print('*');
        }
        System.out.println();
        count--;
        rect(num,count);
    }
}

public static void main(String[] args) {
    int i = 6;
    rect(i,i);
}
}

代替使用类变量计数并一次又一次地设置它。对递归函数使用两个参数。 “ num”用于在单行中打印num次星,“ count”用于跟踪行数。

答案 2 :(得分:1)

一个参数,即正方形的大小。没有外部变量:

<Highlighter
     highlightStyle={{ backgroundColor: "yellow" }}
     searchWords={["and", "or", "the"]}
     textToHighlight="The dog is chasing the cat. Or perhaps they re just playing?"
     onPressNormalText={() => console.log("normal text is clickeddd!")}
     onPressHighlightedText={() => console.log("highlighted text is clickked!")     
/>

您的解决方案以及到目前为止提供的其他解决方案,都在正方形的行上递归,在列上都是迭代的。这种解决方案可以解决这一问题-它在列上是递归的,在行上是迭代的。

输出

class Homework {

    public static void square(int side) {
        if (side > 0) {
            for (int i = 0; i < side; i++) {
                square(-side);
            }
        } else if (side < 0) {
            System.out.print('*');
            square(side + 1);
        } else {
            System.out.println();
        }
    }

    public static void main(String[] args) {
        square(5);
    }
}