首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 循环改递归
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hanfeng685516
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2008-03-10 10:06:32 楼主
    For Y0 = 0 To b(1)
    For Y1 = 0 To b(2)
    For Y2 = 0 To b(3)
    For Y3 = 0 To b(4)
    For Y4 = 0 To b(5)
    For Y5 = 0 To b(6)
    For Y6 = 0 To b(7)
    For Y7 = 0 To b(8)
    For Y8 = 0 To b(9)
    For Y9 = 0 To b(10)
    For Y10 = 0 To b(11)
    For Y11 = 0 To b(12)
    For Y12 = 0 To b(13)
    For Y13 = 0 To b(14)
    For Y14 = 0 To b(15)
    For Y15 = 0 To b(16)
    For Y16 = 0 To b(17)
    For Y17 = 0 To b(18)
    For Y18 = 0 To b(19)
    For Y19 = 0 To b(20)
     
          If Sheet1.Cells(2, 2) - (Y0 * a(1) + Y1 * a(2) + Y2 * a(3) + Y3 * a(4) + Y4 * a(5) + Y5 * a(6) + Y6 * a(7) + Y7 * a(8) + Y8 * a(9) + Y9 * a(10) + Y10 * a(11) _
          + Y11 * a(12) + Y12 * a(13) + Y13 * a(14) + Y14 * a(15) + Y15 * a(16) + Y16 * a(17) + Y17 * a(18) + Y18 * a(19) + Y19 * a(20)) < Sheet1.Cells(2, 3) And _
    Sheet1.Cells(2, 2) - (Y0 * a(1) + Y1 * a(2) + Y2 * a(3) + Y3 * a(4) + Y4 * a(5) + Y5 * a(6) + Y6 * a(7) + Y7 * a(8) + Y8 * a(9) + Y9 * a(10) + Y10 * a(11) _
          + Y11 * a(12) + Y12 * a(13) + Y13 * a(14) + Y14 * a(15) + Y15 * a(16) + Y16 * a(17) + Y17 * a(18) + Y18 * a(19) + Y19 * a(20)) >= 0 Then
          w = w + 1
            Sheet2.Cells(w, 2) = Y0
            Sheet2.Cells(w, 3) = Y1
              Sheet2.Cells(w, 4) = Y2
            Sheet2.Cells(w, 5) = Y3
            Sheet2.Cells(w, 6) = Y4
            Sheet2.Cells(w, 7) = Y5
              Sheet2.Cells(w, 8) = Y6
            Sheet2.Cells(w, 9) = Y7
            Sheet2.Cells(w, 10) = Y8
            Sheet2.Cells(w, 11) = Y9
              Sheet2.Cells(w, 12) = Y10
            Sheet2.Cells(w, 13) = Y11
            Sheet2.Cells(w, 14) = Y12
            Sheet2.Cells(w, 15) = Y13
              Sheet2.Cells(w, 16) = Y14
            Sheet2.Cells(w, 17) = Y15
            Sheet2.Cells(w, 18) = Y16
            Sheet2.Cells(w, 19) = Y17
              Sheet2.Cells(w, 20) = Y18
            Sheet2.Cells(w, 21) = Y19
            Sheet2.Cells(w, 22) = w - 1
            Sheet2.Cells(w, 23) = Sheet1.Cells(2, 2) - (Y0 * a(1) + Y1 * a(2) + Y2 * a(3) + Y3 * a(4) + Y4 * a(5) + Y5 * a(6) + Y6 * a(7) + Y7 * a(8) + Y8 * a(9) + Y9 * a(10) + Y10 * a(11) _
          + Y11 * a(12) + Y12 * a(13) + Y13 * a(14) + Y14 * a(15) + Y15 * a(16) + Y16 * a(17) + Y17 * a(18) + Y18 * a(19) + Y19 * a(20))
            Sheet2.Cells(w, 24) = "x" + Str(w - 1)
            End If
           
        Next Y19
        Next Y18
        Next Y17
        Next Y16
        Next Y15
        Next Y14
        Next Y13
        Next Y12
        Next Y11
        Next Y10
        Next Y9
        Next Y8
        Next Y7
        Next Y6
        Next Y5
        Next Y4
        Next Y3
        Next Y2
        Next Y1
        Next Y0

    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • daisy8675
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

      3

    发表于:2008-03-10 10:15:071楼 得分:0
    眼花中,膜拜下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • laviewpbt
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-10 10:16:362楼 得分:0
    这种代码真垃圾。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • lertulo
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-10 10:18:503楼 得分:0
    呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wangwei1979
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-10 10:47:304楼 得分:0
    循环嵌套20次,第一次看到,佩服
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiu5208
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-10 10:53:395楼 得分:0
    长见识了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WallesCai
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-10 11:49:556楼 得分:0
    晕倒,最多2层循环可以搞定的东西
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WallesCai
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-10 11:50:267楼 得分:0
    楼主发的这个真是低效代码的典范啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hanfeng685516
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-11 14:37:518楼 得分:0
    别只会说就好,把改好的写上去,我可以提醒你们这个没那么简单,要用到数组知识
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hanfeng685516
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-11 14:38:399楼 得分:0
    晕倒,最多2层循环可以搞定的东西

    看来这们人兄,VB等级很差,
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • jennyvenus
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 3

      5

      5

    发表于:2008-03-11 15:19:4810楼 得分:0
    看不清
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Chen8013
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-12 15:20:1711楼 得分:0
    引用 9 楼 hanfeng685516 的回复:
    晕倒,最多2层循环可以搞定的东西

    看来这们人兄,VB等级很差,


      同意!!!!
      20层的嵌套循环,确实是第一次见到!!!!要是你的数组b()有2000个元素,岂不是要写出一个二千层嵌套的循环来?
      再说,这与“递归”扯不上什么关系吧?

      其实用这样的代码就行了:
    VBScript code
    Dim i%, j%, M% M = UBound(b) For i = 0 To M for j = 0 To b(i) '这里是你的循环体中的代码 '.......... Next '(Next j) Next '(Next i)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qiu5208
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-13 09:35:2812楼 得分:0
    引用 9 楼 hanfeng685516 的回复:
    晕倒,最多2层循环可以搞定的东西

    看来这们人兄,VB等级很差,


    差在那没看出来。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Chen8013
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-13 09:37:0913楼 得分:0
      不好意思,献丑了……昨天理解错误………………

      把解决方案重新贴一下,应该用这样的代码:
    VBScript code
    Sub ArrRecursion(aa&(), p&) Static M& Dim i& M = UBound(aa) If (p < M) Then For i = 0 To aa(p) Call ArrRecursion(aa, p + 1) Next Else For i = 0 To aa(p) '在这里写最内层的执行语句 '……………… '……………… Next End If End Sub

      调用的时候,参数p要传入0,比如:Call ArrRecursion(aa, 0)

      可以简单的验证一下:

    Option Explicit
    Dim mlRunTotal&

    Sub ArrRecursion(aa&(), p&)

        Static M&
        Dim i&
       
        M = UBound(aa)
        If (p < M) Then
            For i = 0 To aa(p)
                Call ArrRecursion(aa, p + 1)
            Next
        Else
            For i = 0 To aa(p)
                mlRunTotal = mlRunTotal + 1
            Next
        End If

    End Sub

    Private Sub cmdTest_Click()

        Dim A&(), K&, N&, S&
        Dim i%
       
        K = 5
       
        ReDim A(K)
        Randomize
        S = 1
        Debug.Print
        For i = 0 To K
            N = Rnd() * 8 + 2      '简单的限制一下值域
            A(i) = N
            S = S * (N + 1)
            Debug.Print i; ">>>"; N
        Next
        Debug.Print "理论执行次数:"; S

        mlRunTotal = 0
        Call ArrRecursion(A, 0)
        Debug.Print "实际执行次数:"; mlRunTotal

    End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • myjian
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-03-13 09:42:3214楼 得分:0
    引用 8 楼 hanfeng685516 的回复:
    别只会说就好,把改好的写上去,我可以提醒你们这个没那么简单,要用到数组知识


    建议不要用这种语气~~你是来求人的.别人对着你这眼花的代码提意见,你别不愿意听.

    另外,既然"没那么简单",那就多上点分吧:)

    PS:

    不要针对我啊.....我只是路过.....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • forbearORfolie
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-13 10:07:2415楼 得分:0
    引宋丹丹话:看别人的代码要钱,看LZ代码,要命呐—
    估计windows内核代码的复杂程度也不过如此吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hanfeng685516
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-14 08:35:0116楼 得分:0
     不好意思,献丑了……昨天理解错误………………

      把解决方案重新贴一下,应该用这样的代码:

    这种方法我知道,可是这只是形式上是对的,可是结果和我的就不同,调用本身和goto语句也没什么两样的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yidie
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-14 10:33:4017楼 得分:0
    借用Chen0813的代码
    VBScript code
    Dim k&, w&, n&, sab&,temp&,c&(1 To 20) Public Sub ArrRecursion(p&, j&) Dim i& c(p + 1) = j If (p < 20) Then For i = 0 To b(p) Call ArrRecursion(p + 1, i) Next Else sab = 0 For k = 1 To 19 sab = sab + c(k) * a(k) Next For k = 0 To b(20) temp = k * a(20) If Sheet1.Cells(2, 2) - temp - sab < Sheet1.Cells(2, 3) _ And Sheet1.Cells(2, 2) - temp - sab >= 0 Then w = w + 1 For n = 1 To 20 Sheet2.Cells(w, n + 1) = c(n) Next Sheet2.Cells(w, 22) = w - 1 Sheet2.Cells(w, 23) = Sheet1.Cells(2, 2) - temp - sab Sheet2.Cells(w, 24) = "x" + Str(w - 1) End If Next End If End Sub
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yidie
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-14 10:36:5018楼 得分:0
    Chen8013写成Chen0813,不好意思,发了才知道,又不能修改。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • flyingscv
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2008-03-14 14:37:3519楼 得分:0
    很强大!眼晕中!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cbm666
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2008-03-14 14:48:0920楼 得分:0
    分析需求, 再好好的规划一下你的 "算法" , 编程30多年也没见过这种写法的.



    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved