網站首頁 編程語言 正文
一、遞歸的數學思想
遞歸是一種數學上分而自治的思想
遞歸需要有邊界條件
- 當邊界條件不滿足時,遞歸繼續進行
- 當邊界條件滿足時,遞歸停止
遞歸將大型復雜問題轉化為與原問題相同但規模較小的問題進行處理。
二、遞歸函數
函數體內部可以調用自己
遞歸函數
- 函數體中存在自我調用的函數
遞歸函數是遞歸的數學思想在程序設計中的應用
- 遞歸函數必須有遞歸出口
- 函數的無限遞歸將導致程序棧溢出而崩潰
三、遞歸函數設計技巧
遞歸模型的一般表示法
四、遞歸函數設計示例一
用遞歸的方法編寫函數求字符串長度
代碼如下:
#include <stdio.h>
int strlen_r(const char* s)
{
if( *s )
{
return 1 + strlen_r(s+1);
}
else
{
return 0;
}
}
int main()
{
printf("%d\n", strlen_r("abc"));
printf("%d\n", strlen_r(""));
return 0;
}
輸出結果如下:
五、遞歸函數設計示例二
斐波拉契數列遞歸解法
1,1,2,3,5,8,13,21,...
代碼如下:
#include <stdio.h>
int fac(int n)
{
if( n == 1 )
{
return 1;
}
else if( n == 2 )
{
return 1;
}
else
{
return fac(n-1) + fac(n-2);
}
return -1;
}
int main()
{
printf("%d\n", fac(1));
printf("%d\n", fac(2));
printf("%d\n", fac(9));
return 0;
}
輸出結果如下:
六、遞歸函數設計示例三
漢諾塔問題
- 將木塊借助 B 柱由 A 柱移動到 C 柱
- 每次只能移動一個木塊
- 只能出現小木塊在大木塊之上
漢諾塔問題分解
- 將 n-1 個木塊借助 C 柱由 A 柱移動到 B 柱
- 將最底層的唯一木塊直接移動到 C 柱
- 將 n-1 個木塊借助 A 柱由 B 柱移動到 C 柱
代碼如下:
#include <stdio.h>
void han_move(int n, char a, char b, char c)
{
if( n == 1 )
{
printf("%c --> %c\n", a, c);
}
else
{
han_move(n-1, a, c, b);
han_move(1, a, b, c);
han_move(n-1, b, a, c);
}
}
int main()
{
han_move(3, 'A', 'B', 'C');
return 0;
}
輸出結果如下:
七、小結
- 遞歸是一種將問題分而自治的思想
- 用遞歸解決問題首先要建立遞歸的模型
- 遞歸解法必須要有邊界條件,否則無解
原文鏈接:https://blog.csdn.net/weixin_43129713/article/details/124164731
相關推薦
- 2023-01-20 GO語言函數(func)的聲明與使用詳解_Golang
- 2023-05-16 Android?ActivityManagerService啟動流程詳解_Android
- 2022-08-21 Python命令行庫click的具體使用_python
- 2022-07-21 C語言詳細講解if語句與switch語句的用法_C 語言
- 2022-05-15 Python+Selenium實現讀取網易郵箱驗證碼_python
- 2022-10-20 Android?PowerManagerService?打開省電模式_Android
- 2022-02-19 RHCE安裝Apache,用瀏覽器訪問IP_Linux
- 2022-11-09 go+redis實現消息隊列發布與訂閱的詳細過程_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支