当前位置:网站首页>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 .
边栏推荐
- PHP code audit 3 - system reload vulnerability
- Talk about scalability
- Introduction to extensible system architecture
- Map container
- 按键精灵打怪学习-识别所在地图、跑图、进入帮派识别NPC
- Architecture introduction
- 2. Data type
- 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
- For programmers, if it hurts the most...
- C language - stack
猜你喜欢

Tables in the thesis of latex learning

BGP ---- border gateway routing protocol ----- basic experiment

uniapp 处理过去时间对比现在时间的时间差 如刚刚、几分钟前,几小时前,几个月前

【Day1】 deep-learning-basics

A little feeling

MongoDB数据日期显示相差8小时 原因和解决方案

今日睡眠质量记录78分
![[200 opencv routines] 218 Multi line italic text watermark](/img/3e/537476405f02f0ebd6496067e81af1.png)
[200 opencv routines] 218 Multi line italic text watermark

Reprint: summation formula of proportional series and its derivation process

Safety reinforcement learning based on linear function approximation safe RL with linear function approximation translation 2
随机推荐
What is devsecops? Definitions, processes, frameworks and best practices for 2022
Rhcsa - day 13
Reasons and solutions for the 8-hour difference in mongodb data date display
Native div has editing ability
Es advanced series - 1 JVM memory allocation
Recursion and divide and conquer strategy
Sword finger offer 05 (implemented in C language)
[untitled]
Rhcsa day 9
Introduction to extensible system architecture
For programmers, if it hurts the most...
Vanishing numbers
Exercise 7-8 converting strings to decimal integers (15 points)
Dynamic memory management
leetcode1-3
Network disk installation
Two way process republication + routing policy
原生div具有编辑能力
Evolution from monomer architecture to microservice architecture
MPLS: multi protocol label switching