網(wǎng)站首頁 編程語言 正文
一、遞歸算法
遞歸:你打開面前這扇門,看到屋里面還有一扇門。你走過去,發(fā)現(xiàn)手中的鑰匙還可以打開它,你推開門,發(fā)現(xiàn)里面還有一扇門,你繼續(xù)打開它。若干次之后,你打開面前的門后,發(fā)現(xiàn)只有一間屋子,沒有門了。然后,你開始原路返回,每走回一間屋子,你數(shù)一次,走到入口的時(shí)候,你可以回答出你到底用這你把鑰匙打開了幾扇門。
循環(huán):你打開面前這扇門,看到屋里面還有一扇門。你走過去,發(fā)現(xiàn)手中的鑰匙還可以打開它,你推開門,發(fā)現(xiàn)里面還有一扇門(若前面兩扇門都一樣,那么這扇門和前兩扇門也一樣;如果第二扇門比第一扇門小,那么這扇門也比第二扇門小,你繼續(xù)打開這扇門,一直這樣繼續(xù)下去直到打開所有的門。但是,入口處的人始終等不到你回去告訴他答案。
1、定義:
在數(shù)學(xué)與計(jì)算機(jī)科學(xué)中,遞歸(Recursion)是指在函數(shù)的定義中使用函數(shù)自身的方法。實(shí)際上,遞歸,顧名思義,其包含了兩個(gè)意思:遞 和 歸,這正是遞歸思想的精華所在。
2、實(shí)例:
static void Main(string[] args)
{
int[] sum = new int[30];
for (int i = 0; i < sum.Length; i++)
{
sum[i] = process1(i);
Console.WriteLine(sum[i]);
}
}
public static int process1(int a)
{
if (a == 0 || a == 1) return 1;
return process1(a - 1) + process1(a - 2);
}
3、階乘算法:
public static int process2(int n)
{
if (n == 1) return 1;
return n * process2(n - 1); // 相同重復(fù)邏輯,縮小問題的規(guī)模
}
二、排列算法
輸出任意個(gè)字母和數(shù)字的全排列
對于一個(gè)長度為n的串或者n個(gè)字符(數(shù)字、節(jié)點(diǎn))組成的字符串?dāng)?shù)組,它的全排列共有A(n, n)=n!種。這個(gè)問題也是一個(gè)遞歸的問題。如1,2,3,全排列可得到:{123,132,213,231,312,321}。
用遞歸算法實(shí)現(xiàn)代碼如下:
public static void Permutation(string[] nums, int m, int n)
{
string t;
if (m < n - 1)
{
Permutation(nums, m + 1, n);
for (int i = m + 1; i < n; i++)
{
//可抽取Swap方法
t = nums[m];
nums[m] = nums[i];
nums[i] = t;
Permutation(nums, m + 1, n);
//可抽取Swap方法
t = nums[m];
nums[m] = nums[i];
nums[i] = t;
}
}
else
{
#region 存放到List
Node root = null;
Node currentNode;
for (int j = 0; j < nums.Length; j++)
{
currentNode = new Node(nums[j]);
currentNode.nextNode = root;
root = currentNode;
}
NodeList.Add(root);
#endregion
#region 打印控制臺(tái)
for (int j = 0; j < nums.Length; j++)
{
Console.Write(nums[j]);
}
Console.WriteLine();
#endregion
}
}
調(diào)用算法:
static void Main(string[] args)
{
Nums = new string[] { "a", "b", "c" };
Permutation(Nums, 0, Nums.Length);
Console.ReadKey();
}
原文鏈接:https://www.cnblogs.com/wml-it/p/16048181.html
相關(guān)推薦
- 2023-05-10 Pandas數(shù)據(jù)分析多文件批次聚合處理實(shí)例解析_python
- 2022-07-28 XML基本概念XPath、XSLT與XQuery函數(shù)介紹_XML/RSS
- 2022-11-13 Flutter入門學(xué)習(xí)Dart語言變量及基本使用概念_Dart
- 2023-01-15 Python?networkx中獲取圖的鄰接矩陣方式_python
- 2022-04-07 C++中類的默認(rèn)成員函數(shù)詳解_C 語言
- 2022-09-03 Python?Pandas多種添加行列數(shù)據(jù)方法總結(jié)_python
- 2022-03-24 C語言常見的文件操作函數(shù)_C 語言
- 2022-11-25 Vmware臨時(shí)文件存放路徑_VMware
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支