遞歸-輸出字符串所有的組合情況(代碼、分析、匯編)

目錄:

    • 代碼:
    • 分析:
    • 匯編:

代碼:

#include <stdio.h>/*程序描述:輸出字符串所有的組合情況使用permutation函數進行將指定的下標值,與最大下標值這個范圍的每個下標值進行交換每調用一次permutation函數表示只處理指定下標的值,每次指定位置交換后,再調用b+1進行后面一個位置的交換,直到要交換的位置的與最大下標值相等時,表示沒得交換了輸出該字符串,這次的函數出棧返回調用處(就是處理前一個字符的地方),將前一個位置的字符恢復回沒交換的狀態,再將前一個字符與后面字符交換,如果還可以交換就再次調用permutatuion函數處理后面的字符,要是不可以處理該位置的permutation函數就出棧,返回再前一個位置再進行同樣操作總結:先從第一個字符處理,然后再每個字符調用permutation函數進棧,然后從倒數第二個開始與后面的交換沒得交換后,處理倒數第三個,再回去處理倒數第二個。可以交換就交換,不行就返回處理交換前一個再回去處理交換后面的。
*//*
調換字符函數 (輸出所有排列組合)
第一個參數:處理的字符串
第二個參數:要交換的下標在字符串中
第三個參數:可以交換最大值下標(字符串最后一個字符下標)
*/
void permutation(char s[], int b, int e)
{if( (0 <= b) && (b <= e) ){if( b == e )//如果調換的位置與最后一個字符位置相等時輸出字符串{printf("%s\n", s);}else{int i = 0;//用于與當前位置(b)做交換的位置for(i=b; i<=e; i++)//循環將當前位置與后面的每個位置的數據交換(包括自己本身){char c = s[b];//取當前位置的值s[b] = s[i];//將要交換的值賦給當前位置s[i] = c;//將當前位置值賦給交換的位置permutation(s, b+1, e);//將當前位置的下一個位置調用調換字符函數進行下個位置的交換c = s[b];//將上面當前位置交換后,再交換回來s[b] = s[i];s[i] = c;}}}
}int main()
{char s[] = "abc";permutation(s, 0, 2);getchar();return 0;
}

分析:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

匯編:

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379205.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379205.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379205.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

課本例子代碼第四章

【例4.1】設計一個控制臺應用程序&#xff0c;采用二分查找方法在給定的有序數組a中查找用戶輸入的值&#xff0c;并提示相應的查找結果。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace C…

一個簡單的python日志服務器

一個簡單的python日志服務器&#xff0c;主要目的是搜集各python logging記錄的日志&#xff0c;將其簡單匯總。源碼如下&#xff1a; # -*- coding: utf-8 -*-Created on 2012-06-14 19:50 summary: a simple logging server. use gevent and logging modules author: JerryK…

c#中queue_C#中的Queue.Enqueue()方法示例

c#中queueC&#xff03;Queue.Enqueue()方法 (C# Queue.Enqueue() method) Queue.Enqueue() method is used to add an object/element at the end of the Queue. Queue.Enqueue()方法用于在Queue的末尾添加一個對象/元素。 Syntax: 句法&#xff1a; void Queue.Enqueue(Obj…

C#調用Web Service時的身份驗證

轉自&#xff1a;http://www.anqn.com/dev/vc/2010-01-23/a09122769.shtml 在項目開發&#xff0c;我們經常會使用WebService&#xff0c;但在使用WebService時我們經常會考慮以下問題&#xff1a;怎么防止別人訪問我的WebService?從哪里引用我的WebService?對于第一個問題&a…

遞歸-計算字符串長度(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>//該程序用遞歸計算字符串長度int strlen(const char* s) {if( s NULL ){return -1;}else if( *s \0 ){return 0;}else{return strlen(s1) 1;} }int m…

Java LinkedList void clear()方法與示例

LinkedList void clear()方法 (LinkedList void clear() method) This method is available in package java.util.Collection and here, Collection is an interface. 該方法在java.util.Collection包中可用&#xff0c;在這里&#xff0c; Collection是一個接口。 This metho…

Python-楊輝三角

在控制臺輸出如圖所示一個8層的楊輝三角。 楊輝三角介紹&#xff1a; 每個數等于它上方兩數之和 每行數字左右對稱&#xff0c;由1開始逐漸變大 第n行的數字有n項&#xff0c;將n取8 def yanghui(n):l[1,1]for x in range(1,n):for a in range(x):l[a]l[a]l[a1]l.insert(0,1)…

如何向妻子解釋OOD(轉)

前言 此文譯自CodeProject上<How I explained OOD to my wife>一文&#xff0c;該文章在Top Articles上排名第3&#xff0c;讀了之后覺得非常好&#xff0c;就翻譯出來&#xff0c;供不想讀英文的同學參考學習。 作者(Shubho)的妻子(Farhana)打算重新做一名軟件工程師(她…

不安全代碼和指針資料匯編

不安全代碼和指針&#xff08;C# 編程指南&#xff09;為了保持類型安全&#xff0c;默認情況下&#xff0c;C# 不支持指針運算。不過&#xff0c;通過使用 unsafe 關鍵字&#xff0c;可以定義可使用指針的不安全上下文。有關指針的更多信息&#xff0c;請參見主題指針類型。 注…

ffmpeg-從flv文件中提取AAC音頻數據保存為文件

AAC ADTS格式協議&#xff1a; 從flv文件中提取AAC音頻數據保存為文件。 如果需要詳細了解AAC ADTS格式&#xff0c;可以查詢文檔。 原文件&#xff1a; 提取aac文件&#xff1a; main.c #include <stdio.h> #include <libavutil/log.h>> #include <lib…

Python-統計《水調歌頭·明月幾時有》字符出現次數。

統計《水調歌頭明月幾時有》字符出現次數。 明月幾時有&#xff0c;把酒問青天。 不知天上宮闕&#xff0c;今夕是何年&#xff1f; 我欲乘風歸去&#xff0c;又恐瓊樓玉宇&#xff0c;高處不勝寒。 起舞弄清影&#xff0c;何似在人間&#xff01; 轉朱閣&#xff0c;低綺戶&am…

Linux網絡編程入門 (轉載)

(一)Linux網絡編程--網絡知識介紹 Linux網絡編程--網絡知識介紹客戶端和服務端 網絡程序和普通的程序有一個最大的區別是網絡程序是由兩個部分組成的--客戶端和服務器端. 客戶端 在網絡程序中&#xff0c;如果一個程序主動和外面的程序通信&#xff0c;那么我們…

在Python中將字符串拆分為字符數組

Given a string and we have to split into array of characters in Python. 給定一個字符串&#xff0c;我們必須在Python中拆分為字符數組。 將字符串拆分為字符 (Splitting string to characters) 1) Split string using for loop 1)使用for循環分割字符串 Use for loop t…

SQL表值函數和標量值函數的區別 [轉]

SQL表值函數和標量值函數的區別 寫sql存儲過程經常需要調用一些函數來使處理過程更加合理&#xff0c;也可以使函數復用性更強&#xff0c;不過在寫sql函數的時候可能會發現&#xff0c;有些函數是在表值函數下寫的有些是在標量值下寫的&#xff0c;區別是表值函數只能返回一個…

N Queen(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; main.c #include <stdio.h>/* 程序描述&#xff1a;輸出N*N中符合左右對角線與上下左右方向都沒被使用的位置在每一行的所有情況使用檢測左上角&#xff0c;正上角&#xff0c;右上…

kotlin 計算平方_Kotlin程序計算自然數之和

kotlin 計算平方Given a number number, and we have to calculate the sum of all natural numbers from 1 to number. 鑒于一些數字 &#xff0c;我們必須從1計算所有自然數的總和數量 。 Example: 例&#xff1a; Input:number 15Output:120用于計算Kotlin中自然數之和的…

Python-身份證核對

中華人民共和國居民身份證號碼由17 位數字和1位校驗碼組成。其中&#xff0c;前6位為所在地編號&#xff0c;第7~14 位為出生年月日&#xff0c;第15~17位為登記流水號&#xff0c;其中第17位偶數為女性&#xff0c;奇數為男性。校驗碼的生成規則如下: 將前面的身份證號碼17位數…

VC 加載套接字庫

//加載套接字庫 WORD wVersionRequested;//套接字庫版本信息 WSADATA wsaData; int err; wVersionRequested MAKEWORD(1,1); err WSAStartup(wVersionRequested,&wsaData); if(err ! 0){ //加載失敗 return; } if(LOBYTE(wsaData.wVersion) ! 1 || //判斷是不是所請求的…

統計各種字符個數

#include <stdio.h> #include <conio.h>int main(int argc, char * argv[]) {char ch;int letters 0, space 0, digit 0, others 0;printf("請輸入一組字符串:\n");while((chgetchar())!\n){if(ch>a && ch < z || ch >A &&…

樹存儲結構(代碼、分析、匯編)

目錄&#xff1a;代碼&#xff1a;分析&#xff1a;匯編&#xff1a;代碼&#xff1a; LinkList.h LinkList.c 線性表 GTree.h #ifndef _GTREE_H_ #define _GTREE_H_typedef void GTree;//定義樹類型 typedef void GTreeData;//定義節點中存放數據的類型 typedef void (GTre…