当前位置:网站首页>Recursive method to achieve full permutation (C language)
Recursive method to achieve full permutation (C language)
2022-07-04 10:27:00 【Lol only plays Timo】
Full permutation is the mathematical tool we learned in mathematics to calculate all the permutations of a group of numbers or letters .
such as ,ABCD These four letters are randomly selected from the full arrangement of three letters 24 There are so many kinds . that , How can we use program to realize it ?
Let's discuss the manual process of this problem :
Nothing more than to see whether the current letter is desirable when taking the current letter , If it's not advisable, look at the next , If it is desirable, take out the letter .
This is very consistent with the characteristics of recursion , We only care about whether the current letter is desirable every time .
We can give an array of subscripts , The initial values of the subscript array are all assigned 0, The length of the subscript array is the same as the length of the input string . When a character in the string is selected , Then the corresponding value of this character in the subscript array is changed to 1. And store this character into the string array we want to output at last , When the last string array has enough three characters , We just let it output , This is also the condition for recursion to stop .
The code is as follows :
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include "tool.h"
#define targetCount 3
boolean isSafe(int *arr, int index);
void completeArrangement(int *arr, int index, char *str, char *target, int temp);
void completeArrangement(int *arr, int index, char *str ,char *target, int temp) {
int i;
if (temp == 3) {
printf("%s\n",target);
return;
}
for (i = 0; i < strlen(str); i++) {
if (isSafe(arr,i)) {
arr[i] = 1;
target[temp] = str[i];
completeArrangement(arr, index+1, str , target, temp+1);
arr[i] = 0;
}
}
}
boolean isSafe(int *arr, int index) {
if (arr[index] == 1) {
return FALSE;
} else {
return TRUE;
}
}
int main() {
char str[5];
int length;
int *arr = NULL;
int temp = 0;
char target[targetCount];
printf("please input your string:");
gets(str);
length = strlen(str);
arr = (int *) calloc(sizeof(int),length);
completeArrangement(arr, 0, str , target, temp);
free(arr);
return 0;
}
#ifndef _TOOL_H_
#define _TOOL_H_
typedef unsigned char boolean;
#define TRUE 1
#define FALSE 0
#define NOT_FOUND -1
#endif
About recursion :
Many people think recursion is very tall , It is difficult to , In fact, recursion is the repeated invocation of a method , Don't think too much when writing recursive programs , The simpler and purer the consideration, the better , And when writing recursion, don't start with the core part , contrary , When writing recursive programs, you must be very clear about the end conditions of recursion , Otherwise, it is easy to cause system stack overflow when the program is running .
Writing is not good , Please correct me .
边栏推荐
- Network disk installation
- Exercise 8-10 output student grades (20 points)
- The most detailed teaching -- realize win10 multi-user remote login to intranet machine at the same time -- win10+frp+rdpwrap+ Alibaba cloud server
- Exercise 7-2 finding the maximum value and its subscript (20 points)
- Read a piece of text into the vector object, and each word is stored as an element in the vector. Convert each word in the vector object to uppercase letters. Output the converted elements in the vect
- 【Day1】 deep-learning-basics
- Sword finger offer 31 Stack push in and pop-up sequence
- 【FAQ】华为帐号服务报错 907135701的常见原因总结和解决方法
- 2021-08-10 character pointer
- Number of relationship models
猜你喜欢
随机推荐
MPLS: multi protocol label switching
VLAN part of switching technology
Button wizard business running learning - commodity quantity, price reminder, judgment Backpack
System.currentTimeMillis() 和 System.nanoTime() 哪个更快?别用错了!
BGP advanced experiment
IPv6 comprehensive experiment
[200 opencv routines] 218 Multi line italic text watermark
RHCE - day one
Basic data types of MySQL
Linked list operation can never change without its roots
Safety reinforcement learning based on linear function approximation safe RL with linear function approximation translation 1
Reasons and solutions for the 8-hour difference in mongodb data date display
What is devsecops? Definitions, processes, frameworks and best practices for 2022
Reprint: summation formula of proportional series and its derivation process
Write a program to judge whether the two arrays are equal, and then write a similar program to compare the two vectors.
How can Huawei online match improve the success rate of player matching
Container cloud notes
2021-08-11 function pointer
Lavel document reading notes -how to use @auth and @guest directives in lavel
If the uniapp is less than 1000, it will be displayed according to the original number. If the number exceeds 1000, it will be converted into 10w+ 1.3k+ display









