pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

<small id='xi9uZ'></small><noframes id='xi9uZ'>

      <bdo id='xi9uZ'></bdo><ul id='xi9uZ'></ul>
  1. <tfoot id='xi9uZ'></tfoot>
  2. <legend id='xi9uZ'><style id='xi9uZ'><dir id='xi9uZ'><q id='xi9uZ'></q></dir></style></legend>
    <i id='xi9uZ'><tr id='xi9uZ'><dt id='xi9uZ'><q id='xi9uZ'><span id='xi9uZ'><b id='xi9uZ'><form id='xi9uZ'><ins id='xi9uZ'></ins><ul id='xi9uZ'></ul><sub id='xi9uZ'></sub></form><legend id='xi9uZ'></legend><bdo id='xi9uZ'><pre id='xi9uZ'><center id='xi9uZ'></center></pre></bdo></b><th id='xi9uZ'></th></span></q></dt></tr></i><div class="qbmjonh" id='xi9uZ'><tfoot id='xi9uZ'></tfoot><dl id='xi9uZ'><fieldset id='xi9uZ'></fieldset></dl></div>

      了解遞歸以生成排列

      Understanding Recursion to generate permutations(了解遞歸以生成排列)
          <i id='bT9Jj'><tr id='bT9Jj'><dt id='bT9Jj'><q id='bT9Jj'><span id='bT9Jj'><b id='bT9Jj'><form id='bT9Jj'><ins id='bT9Jj'></ins><ul id='bT9Jj'></ul><sub id='bT9Jj'></sub></form><legend id='bT9Jj'></legend><bdo id='bT9Jj'><pre id='bT9Jj'><center id='bT9Jj'></center></pre></bdo></b><th id='bT9Jj'></th></span></q></dt></tr></i><div class="8httij8" id='bT9Jj'><tfoot id='bT9Jj'></tfoot><dl id='bT9Jj'><fieldset id='bT9Jj'></fieldset></dl></div>

            <bdo id='bT9Jj'></bdo><ul id='bT9Jj'></ul>

              1. <small id='bT9Jj'></small><noframes id='bT9Jj'>

                <tfoot id='bT9Jj'></tfoot>

              2. <legend id='bT9Jj'><style id='bT9Jj'><dir id='bT9Jj'><q id='bT9Jj'></q></dir></style></legend>
                  <tbody id='bT9Jj'></tbody>
                本文介紹了了解遞歸以生成排列的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

                問題描述

                我發現遞歸,除了像階乘這樣非常直接的遞歸,非常難以理解.以下代碼段打印字符串的所有排列.誰能幫我理解一下.正確理解遞歸的方法是什么.

                I find recursion, apart from very straight forward ones like factorial, very difficult to understand. The following snippet prints all permutations of a string. Can anyone help me understand it. What is the way to go about to understand recursion properly.

                void permute(char a[], int i, int n)
                {
                   int j;
                   if (i == n)
                     cout << a << endl;
                   else
                   {
                       for (j = i; j <= n; j++)
                       {
                          swap(a[i], a[j]);          
                          permute(a, i+1, n);
                          swap(a[i], a[j]);
                       }
                   }
                } 
                
                int main()
                {
                   char a[] = "ABCD";
                   permute(a, 0, 3);
                   getchar();
                   return 0;
                }
                

                推薦答案

                PaulR 提出了正確的建議.您必須通過手工"(使用任何您想要的工具——調試器、文件、記錄函數調用和某些點的變量)來運行代碼,直到你理解它.有關代碼的解釋,我會向您推薦 quasiverse 的優秀答案.

                PaulR has the right suggestion. You have to run through the code by "hand" (using whatever tools you want - debuggers, paper, logging function calls and variables at certain points) until you understand it. For an explanation of the code I'll refer you to quasiverse's excellent answer.

                也許這個調用圖的可視化用稍微小一點的字符串使它的工作原理更加明顯:

                Perhaps this visualization of the call graph with a slightly smaller string makes it more obvious how it works:

                該圖是使用 graphviz 制作的.

                The graph was made with graphviz.

                // x.dot
                // dot x.dot -Tpng -o x.png
                digraph x {
                rankdir=LR
                size="16,10"
                
                node [label="permute("ABC", 0, 2)"] n0;
                 node [label="permute("ABC", 1, 2)"] n1;
                  node [label="permute("ABC", 2, 2)"] n2;
                  node [label="permute("ACB", 2, 2)"] n3;
                 node [label="permute("BAC", 1, 2)"] n4;
                  node [label="permute("BAC", 2, 2)"] n5;
                  node [label="permute("BCA", 2, 2)"] n6;
                 node [label="permute("CBA", 1, 2)"] n7;
                  node [label="permute("CBA", 2, 2)"] n8;
                  node [label="permute("CAB", 2, 2)"] n9;
                
                n0 -> n1 [label="swap(0, 0)"];
                n0 -> n4 [label="swap(0, 1)"];
                n0 -> n7 [label="swap(0, 2)"];
                
                n1 -> n2 [label="swap(1, 1)"];
                n1 -> n3 [label="swap(1, 2)"];
                
                n4 -> n5 [label="swap(1, 1)"];
                n4 -> n6 [label="swap(1, 2)"];
                
                n7 -> n8 [label="swap(1, 1)"];
                n7 -> n9 [label="swap(1, 2)"];
                }
                

                這篇關于了解遞歸以生成排列的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

                【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

                相關文檔推薦

                In what ways do C++ exceptions slow down code when there are no exceptions thown?(當沒有異常時,C++ 異常會以何種方式減慢代碼速度?)
                Why catch an exception as reference-to-const?(為什么要捕獲異常作為對 const 的引用?)
                When and how should I use exception handling?(我應該何時以及如何使用異常處理?)
                Scope of exception object in C++(C++中異常對象的范圍)
                Catching exceptions from a constructor#39;s initializer list(從構造函數的初始化列表中捕獲異常)
                Difference between C++03 throw() specifier C++11 noexcept(C++03 throw() 說明符 C++11 noexcept 之間的區別)

                    <i id='pBI62'><tr id='pBI62'><dt id='pBI62'><q id='pBI62'><span id='pBI62'><b id='pBI62'><form id='pBI62'><ins id='pBI62'></ins><ul id='pBI62'></ul><sub id='pBI62'></sub></form><legend id='pBI62'></legend><bdo id='pBI62'><pre id='pBI62'><center id='pBI62'></center></pre></bdo></b><th id='pBI62'></th></span></q></dt></tr></i><div class="owrjj8b" id='pBI62'><tfoot id='pBI62'></tfoot><dl id='pBI62'><fieldset id='pBI62'></fieldset></dl></div>
                      <tbody id='pBI62'></tbody>

                      • <bdo id='pBI62'></bdo><ul id='pBI62'></ul>

                        <small id='pBI62'></small><noframes id='pBI62'>

                        <legend id='pBI62'><style id='pBI62'><dir id='pBI62'><q id='pBI62'></q></dir></style></legend>

                          <tfoot id='pBI62'></tfoot>

                        1. 主站蜘蛛池模板: 顶呱呱交易平台-行业领先的公司资产交易服务平台 | 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 无菌水质袋-NASCO食品无菌袋-Whirl-Pak无菌采样袋-深圳市慧普德贸易有限公司 | 冷库安装厂家_杭州冷库_保鲜库建设-浙江克冷制冷设备有限公司 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 上海皓越真空设备有限公司官网-真空炉-真空热压烧结炉-sps放电等离子烧结炉 | 创富网-B2B网站|供求信息网|b2b平台|专业电子商务网站 | 江苏全风,高压风机,全风环保风机,全风环形高压风机,防爆高压风机厂家-江苏全风环保科技有限公司(官网) | 房车价格_依维柯/大通/东风御风/福特全顺/江铃图片_云梯搬家车厂家-程力专用汽车股份有限公司 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | 滑石粉,滑石粉厂家,超细滑石粉-莱州圣凯滑石有限公司 | 电动打包机_气动打包机_钢带捆扎机_废纸打包机_手动捆扎机 | 胶水,胶粘剂,AB胶,环氧胶,UV胶水,高温胶,快干胶,密封胶,结构胶,电子胶,厌氧胶,高温胶水,电子胶水-东莞聚力-聚厉胶粘 | 彼得逊采泥器-定深式采泥器-电动土壤采样器-土壤样品风干机-常州索奥仪器制造有限公司 | 不锈钢螺丝 - 六角螺丝厂家 - 不锈钢紧固件 - 万千紧固件--紧固件一站式采购 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 江苏远邦专注皮带秤,高精度皮带秤,电子皮带秤研发生产 | 农产品溯源系统_农产品质量安全追溯系统_溯源系统 | 急救箱-应急箱-急救包厂家-北京红立方医疗设备有限公司 | 压力控制器,差压控制器,温度控制器,防爆压力控制器,防爆温度控制器,防爆差压控制器-常州天利智能控制股份有限公司 | 阳光模拟试验箱_高低温试验箱_高低温冲击试验箱_快速温变试验箱|东莞市赛思检测设备有限公司 | 首页-浙江橙树网络技术有限公司 石磨面粉机|石磨面粉机械|石磨面粉机组|石磨面粉成套设备-河南成立粮油机械有限公司 | Magnescale探规,Magnescale磁栅尺,Magnescale传感器,Magnescale测厚仪,Mitutoyo光栅尺,笔式位移传感器-苏州连达精密量仪有限公司 | 知名电动蝶阀,电动球阀,气动蝶阀,气动球阀生产厂家|价格透明-【固菲阀门官网】 | 防勒索软件_数据防泄密_Trellix(原McAfee)核心代理商_Trellix(原Fireeye)售后-广州文智信息科技有限公司 | 大_小鼠elisa试剂盒-植物_人Elisa试剂盒-PCR荧光定量试剂盒-上海一研生物科技有限公司 | 深圳离婚律师咨询「在线免费」华荣深圳婚姻律师事务所专办离婚纠纷案件 | 云南成人高考_云南成考网| 气力输送_输送机械_自动化配料系统_负压吸送_制造主力军江苏高达智能装备有限公司! | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 股指期货-期货开户-交易手续费佣金加1分-保证金低-期货公司排名靠前-万利信息开户 | 压缩空气冷冻式干燥机_吸附式干燥机_吸干机_沪盛冷干机 | 建筑工程资质合作-工程资质加盟分公司-建筑资质加盟 | 连续密炼机_双转子连续密炼机_连续式密炼机-南京永睿机械制造有限公司 | 商用绞肉机-熟肉切片机-冻肉切丁机-猪肉开条机 - 广州市正盈机械设备有限公司 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 中控室大屏幕-上海亿基自动化控制系统工程有限公司 | 中国产业发展研究网 - 提供行业研究报告 可行性研究报告 投资咨询 市场调研服务 | 中国玩具展_玩具展|幼教用品展|幼教展|幼教装备展 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 |