当前位置:网站首页>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 .
边栏推荐
- Exercise 8-10 output student grades (20 points)
- Collection of practical string functions
- Native div has editing ability
- Custom type: structure, enumeration, union
- Idea SSH channel configuration
- Two way process republication + routing policy
- Realsense of d435i, d435, d415, t265_ Matching and installation of viewer environment
- Lavel document reading notes -how to use @auth and @guest directives in lavel
- Exercise 9-4 finding books (20 points)
- Use the data to tell you where is the most difficult province for the college entrance examination!
猜你喜欢
MongoDB数据日期显示相差8小时 原因和解决方案
When I forget how to write SQL, I
Delayed message center design
Occasional pit compiled by idea
Remove linked list elements
Safety reinforcement learning based on linear function approximation safe RL with linear function approximation translation 1
leetcode1-3
Some summaries of the third anniversary of joining Ping An in China
OSPF summary
Summary of several job scheduling problems
随机推荐
The most detailed teaching -- realize win10 multi-user remote login to intranet machine at the same time -- win10+frp+rdpwrap+ Alibaba cloud server
Laravel文档阅读笔记-How to use @auth and @guest directives in Laravel
Leetcode48. Rotate image
uniapp 处理过去时间对比现在时间的时间差 如刚刚、几分钟前,几小时前,几个月前
From programmers to large-scale distributed architects, where are you (I)
What is an excellent architect in my heart?
PHP code audit 3 - system reload vulnerability
Knapsack problem and 0-1 knapsack problem
2020-03-28
Kotlin: collection use
Exercise 7-4 find out the elements that are not common to two arrays (20 points)
DCL statement of MySQL Foundation
Vs201 solution to failure to open source file HPP (or link library file)
Es entry series - 6 document relevance and sorting
Exercise 8-7 string sorting (20 points)
Dos:disk operating system, including core startup program and command program
Debug:==42==ERROR: AddressSanitizer: heap-buffer-overflow on address
【Day2】 convolutional-neural-networks
OSPF comprehensive experiment
Histogram equalization