当前位置:网站首页>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 .
边栏推荐
- What is devsecops? Definitions, processes, frameworks and best practices for 2022
- Introduction to extensible system architecture
- OSPF summary
- 转载:等比数列的求和公式,及其推导过程
- 使用 C# 提取 PDF 文件中的所有文字(支持 .NET Core)
- Collection of practical string functions
- Software sharing: the best PDF document conversion tool and PDF Suite Enterprise version sharing | with sharing
- Exercise 7-2 finding the maximum value and its subscript (20 points)
- 入职中国平安三周年的一些总结
- Lavel document reading notes -how to use @auth and @guest directives in lavel
猜你喜欢

【Day1】 deep-learning-basics

Some summaries of the third anniversary of joining Ping An in China

Intelligent gateway helps improve industrial data acquisition and utilization

MPLS: multi protocol label switching
If you don't know these four caching modes, dare you say you understand caching?

基于线性函数近似的安全强化学习 Safe RL with Linear Function Approximation 翻译 1

Sword finger offer 05 (implemented in C language)
如果不知道這4種緩存模式,敢說懂緩存嗎?

leetcode842. Split the array into Fibonacci sequences

leetcode1-3
随机推荐
[untitled]
Safety reinforcement learning based on linear function approximation safe RL with linear function approximation translation 1
2021-08-11 function pointer
【Day1】 deep-learning-basics
Rhcsa learning practice
Vanishing numbers
Exercise 9-5 address book sorting (20 points)
Servlet基本原理与常见API方法的应用
Legion is a network penetration tool
Latex learning insertion number - list of filled dots, bars, numbers
Application of safety monitoring in zhizhilu Denggan reservoir area
Online troubleshooting
Today's sleep quality record 78 points
原生div具有编辑能力
Jianzhi offer 04 (implemented in C language)
What is devsecops? Definitions, processes, frameworks and best practices for 2022
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
leetcode842. Split the array into Fibonacci sequences
Exercise 9-1 time conversion (15 points)
Rhsca day 11 operation