【问题标题】:Recursive function with loops inside内部有循环的递归函数
【发布时间】:2021-10-21 10:13:34
【问题描述】:

我正在尝试在递归函数中概括循环...

基本的双循环是以下函数:

func multiLoops(start ix:Int, upTo n:Int) {
    for i in ix...n {
        for j in i+1 ... n+1 {
            print("it is \(i) \(j)")
        }
    }
}
multiLoops(start: 3, upTo: 6)

结果如下:

it is 3 4
it is 3 5
it is 3 6
it is 3 7
it is 4 5
it is 4 6
it is 4 7
it is 5 6
it is 5 7
it is 6 7

我对递归函数的尝试如下:

func multiLoopsRecursive(start ix:Int, upTo n:Int, loopNumber:Int){
    var loopNumber = loopNumber
    var previous_i = ix
    
    func loop(start ix:Int, upTo n:Int) {
        for i in ix + 1...n {
            print("it is \(previous_i) \(i)")
            if loopNumber > 1 {
                loopNumber -= 1
                previous_i = i
            loop(start: previous_i+1, upTo: n+loopNumber)
            }
        }
    }
    loop(start: ix, upTo: n)
}
multiLoopsRecursive(start: 3, upTo: 6, loopNumber: 2)

结果如下...

it is 3 4
it is 4 6
it is 4 7
it is 4 5
it is 4 6

与基本的双循环不太一样... 我真的被屏蔽了…… 谢谢您的帮助... 问候 克

【问题讨论】:

    标签: swift loops recursion


    【解决方案1】:

    添加了打印 loopNumber 的基本双循环:

        for i in ix...n {
            print("it is loop 1")
            for j in i+1 ... n+1 {
                print("it is loop 2")
                print("it is \(i) \(j)")
            }
        }
    }
    multiLoops(start: 3, upTo: 6)
    
    

    结果:

    it is loop 1
    it is loop 2
    it is 3 4
    it is loop 2
    it is 3 5
    it is loop 2
    it is 3 6
    it is loop 2
    it is 3 7
    it is loop 1
    it is loop 2
    it is 4 5
    it is loop 2
    it is 4 6
    it is loop 2
    it is 4 7
    it is loop 1
    it is loop 2
    it is 5 6
    it is loop 2
    it is 5 7
    it is loop 1
    it is loop 2
    it is 6 7
    
    

    Larme,请找到添加了 loopNumber 的代码:

    
    var loopNumber = 1
    func multiLoopsRecursive(start: Int, upTo: Int) {
        print("it is loop \(loopNumber)")
        for i in start+1...upTo+1 {
            print("it is \(start) \(i)")
        }
        let newStart = start + 1
        if newStart < upTo+1 {
            loopNumber += 1
            multiLoopsRecursive(start: newStart, upTo: upTo)
        }
    }
    
    print("Recursive")
    multiLoopsRecursive(start: 3, upTo: 6)
    
    

    结果:

    
    Recursive
    it is loop 1
    it is 3 4
    it is 3 5
    it is 3 6
    it is 3 7
    it is loop 2
    it is 4 5
    it is 4 6
    it is 4 7
    it is loop 3
    it is 5 6
    it is 5 7
    it is loop 4
    it is 6 7
    
    

    感谢您的支持 克

    【讨论】:

      【解决方案2】:

      我们来了! 诀窍是要知道在哪个循环中调整不同的变量。为了更清楚起见,我在代码中保留了“向下和向上打印循环”,但它当然可以被抑制。 现在它适用于循环中的循环:-)

      func loopInLoop (iStart:Int, iEnd:Int, numberOfLoops : Int) {
          print("what loop is it! \(loopIndex)")
          var iRank = 0
          
          for i in iStart...(iEnd - numberOfLoops + loopIndex) {
              iArray[loopIndex-1] = i 
              iRank += 1
              if loopIndex < numberOfLoops {
                  print ("loop down")
                  loopIndex += 1
                  loopInLoop(iStart: iStart + iRank, iEnd: iEnd, numberOfLoops: numberOfLoops)
                  
              } else {print("iArray:\(iArray)")}
          }
          print ("loop up")
          loopIndex -= 1
      }
      
      let iStart = 3 // initial starting index of first loop, must be <= iEnd
      let iEnd = 7 // ending starting index of first loop
      let numberOfLoops = 2 // number of loop to execute, must be <= (iEnd-iStart)
      
      var iArray = [Int](repeating: 0, count: numberOfLoops) // Array of indexes
      var loopIndex = 1 // initial index of the loop
      
      loopInLoop(iStart: iStart, iEnd: iEnd, numberOfLoops : numberOfLoops)
      

      结果:

      what loop is it! 1
      loop down
      what loop is it! 2
      iArray:[3, 4]
      iArray:[3, 5]
      iArray:[3, 6]
      iArray:[3, 7]
      loop up
      loop down
      what loop is it! 2
      iArray:[4, 5]
      iArray:[4, 6]
      iArray:[4, 7]
      loop up
      loop down
      what loop is it! 2
      iArray:[5, 6]
      iArray:[5, 7]
      loop up
      loop down
      what loop is it! 2
      iArray:[6, 7]
      loop up
      loop up
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-09
        • 2015-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-21
        • 2023-03-24
        • 2021-01-16
        相关资源
        最近更新 更多