408學習之c語言(遞歸與函數)

今天主要學習了遞歸與函數的相關內容,下面將我今天所學知識與所寫代碼分享給大家

遞歸核心要點
遞歸三要素

基準條件(明確終止條件)
遞歸調用(逐步分解問題)
收斂性(確保每次遞歸都向基準條件靠近)

常見應用場景

分治算法(如歸并排序、快速排序)
樹形/圖形結構遍歷
數學計算(階乘、斐波那契數列等)
使用注意事項
注意:警惕棧溢出(深度過大時需優化)
避免重復計算(可采用記憶化優化)
性能考量(通常比迭代實現效率低)

**

(一)用遞歸查找數組最大值

**`/* 遞歸查找數組最大值* @param p1 數組首地址指針* @param sz 當前檢查的索引位置* @return 當前子數組的最大值 */
int find_max(int* p1, int sz) {if (sz == 0) {  // 基準條件:只剩首元素時直接返回return p1[sz];}// 遞歸比較前N-1個元素的最大值與當前元素int prev_max = find_max(p1, sz - 1); return (prev_max >= p1[sz]) ? prev_max : p1[sz];
}int main() {int arr1[] = { 1,2,3,74,3,6 };int sz = sizeof(arr1) / sizeof(arr1[0]);printf("max = %d\n", find_max(arr1, sz-1));return 0;
}`

(二)用遞歸計算數組元素之和

/* 遞歸計算數組元素和* @param arr 目標數組* @param l 當前左邊界* @param r 右邊界(固定)* @return 當前子數組的和 */
int sum_arr(int arr[], int l, int r) {if (l == r) {  // 基準條件:單個元素直接返回return arr[l];}return arr[l] + sum_arr(arr, l + 1, r);  // 當前元素+后續元素和
}int main() {int arr[10] = { 1,2,3,4,5,6,7,8,9,0 };int sz = sizeof(arr) / sizeof(arr[0]) - 1;printf("sum = %d\n", sum_arr(arr, 0, sz));return 0;
}

(三)用遞歸實現冒泡排序

/* 遞歸版冒泡排序* @param p1 數組指針* @param l 固定左邊界(0)* @param r 動態右邊界 */
void bubble_arr(int* p1, int l, int r) {if (l == r) return;  // 基準條件:排序完成// 單趟冒泡(異或交換避免臨時變量)for (int i = 0; i < r; i++) {if (p1[i] > p1[i + 1]) {p1[i] ^= p1[i + 1];p1[i + 1] ^= p1[i];p1[i] ^= p1[i + 1];}}bubble_arr(p1, l, r - 1);  // 遞歸處理未排序部分
}int main() {int arr[] = { 1,6,7,3,9,5,8,3,4 };int sz = sizeof(arr) / sizeof(arr[0]) - 1;bubble_arr(arr, 0, sz);// 打印結果for (int i = 0; i <= sz; i++) {printf("%d ", arr[i]);}return 0;
}

(四)用遞歸求最大公約數

#include<stdio.h>/* 遞歸求最大公約數* @param a 較大數* @param b 較小數* @return 最大公約數 */
int max_yueshu(int a, int b) {int r = a % b;if (r == 0) return b;  // 基準條件:整除時返回除數return max_yueshu(b, r);  // 遞歸:轉為求b和余數的公約數
}int main() {int a = 48, b = 18;printf("GCD = %d\n", max_yueshu(a, b));return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96797.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96797.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96797.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

swVBA自學筆記016、Solidworks API Help 幫助文檔的(三大版塊)

目錄1. Namespace (命名空間) 版塊2. Interface (接口) 版塊3. Members (接口成員) 版塊4、總結關系5、如果你感覺上面說的過于簡單&#xff0c;請往下看!6、示例鏈接→SOLIDWORKS API Help 20197、需要注意的是&#xff0c;帶“I”的對象表示&#xff1a;接口1. Namespace (命…

通俗易懂地講解JAVA的BIO、NIO、AIO

理解Java的I/O模型&#xff08;BIO、NIO、AIO&#xff09;對于構建高性能網絡應用至關重要 &#x1f9e0; 通俗理解&#xff1a;快遞站的故事 想象一個快遞站&#xff1a; ? BIO&#xff1a;就像快遞站為每一個包裹都安排一位專員。專員從接到包裹到處理完&#xff08;簽收、…

LabVIEW 泵輪檢測系統

在汽車行業&#xff0c;泵輪作為液力變矩器關鍵部件&#xff0c;其質量檢測極為重要。傳統手工檢測泵輪效率低且誤差大&#xff0c;為此構建基于 LabVIEW 與西門子硬件結合的泵輪檢測系統。 應用場景 聚焦汽車零部件生產車間&#xff0c;對泵輪總成進行出廠前檢測。在液力變矩…

2025年8月月賽 T2 T3

一. 七天假日 T2原思路&#xff1a;直接計算左右括號的數量&#xff0c;然后直接輸出他們的差改進思路&#xff1a; 用d值記錄截止到當前位置&#xff0c;還需要多少個右括號可以滿足非法要求cur&#xff1a;截止到當前位置&#xff0c;已經有多少個右括號sum是右括號位置的前綴…

數據結構----棧的順序存儲(順序棧)

棧的特點&#xff1a;先進后出棧的操作&#xff1a;用數組進行存儲&#xff08;1&#xff09;初始化&#xff1a;//棧 typedef struct {int *data;//指針模擬分配數組int top;//棧“頂”指針 }Stack; //初始化 Stack InitStack(){Stack s;//給數組分配空間s.data (int*)malloc…

React Hooks原理深度解析與高級應用模式

React Hooks原理深度解析與高級應用模式 引言 React Hooks自16.8版本引入以來&#xff0c;徹底改變了我們編寫React組件的方式。然而&#xff0c;很多開發者僅僅停留在使用層面&#xff0c;對Hooks的實現原理和高級應用模式了解不深。本文將深入探討Hooks的工作原理、自定義Hoo…

兼職網|基于SpringBoot和Vue的蝸牛兼職網(源碼+數據庫+文檔)

項目介紹 : SpringbootMavenMybatis PlusVue Element UIMysql 開發的前后端分離的蝸牛兼職網&#xff0c;項目分為管理端和用戶端和企業端。 項目演示: 基于SpringBoot和Vue的蝸牛兼職網 運行環境: 最好是java jdk 1.8&#xff0c;我們在這個平臺上運行的。其他版本理論上也可…

TDengine 聚合函數 LEASTSQUARES 用戶手冊

LEASTSQUARES 函數用戶手冊 函數定義 LEASTSQUARES(expr, start_val, step_val)功能說明 LEASTSQUARES() 函數對指定列的數據進行最小二乘法線性擬合&#xff0c;返回擬合直線的斜率&#xff08;slope&#xff09;和截距&#xff08;intercept&#xff09;。該函數基于線性回…

Redis最佳實踐——安全與穩定性保障之高可用架構詳解

全面詳解 Java 中 Redis 在電商應用的高可用架構設計一、高可用架構核心模型 1. 多層級高可用體系 #mermaid-svg-anJ3iQ0ymhr025Jn {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-anJ3iQ0ymhr025Jn .error-icon{fil…

ABAP 屏幕在自定義容器寫多行文本框

文章目錄變量定義容器等邏輯屏幕效果變量定義 CONSTANTS: GC_TEXT_LINE_LENGTH TYPE I VALUE 72. TYPES: TEXT_TABLE_TYPE(GC_TEXT_LINE_LENGTH) TYPE C OCCURS 0. DATA: GV_SPLITTER TYPE REF TO CL_GUI_EASY_SPLITTER_CONTAINER. DATA: GV_CUSTOM_CONTAINER TYPE REF TO CL_…

昆山精密機械公司8個Solidworks共用一臺服務器

在當今高度信息化的制造業環境中&#xff0c;昆山精密機械公司面臨著如何高效利用SolidWorks這一核心設計工具的現實挑戰。隨著企業規模的擴大和設計團隊的分散&#xff0c;傳統的單機授權模式已無法滿足協同設計需求。通過引入云飛云共享云桌面解決方案&#xff0c;該公司成功…

【WebSocket?】入門之旅(三):WebSocket 的實戰應用

本篇文章將通過構建一個簡單的實時聊天應用&#xff0c;演示如何在前端和后端搭建 WebSocket 系統&#xff0c;完成實時消息傳輸。通過實戰&#xff0c;幫助你更好地理解 WebSocket 在實際項目中的應用。 目錄 搭建 WebSocket 服務器WebSocket 客戶端實現實時聊天應用示例常見…

CentOS 8-BClinux8.2更換為阿里云鏡像源:保姆級教程

還在為 CentOS 8 官方源訪問緩慢或不可用而煩惱嗎&#xff1f;更換為國內鏡像源&#xff0c;如阿里云&#xff0c;可以顯著提升軟件包下載速度和穩定性。本文將帶你一步步完成 CentOS 8 鏡像源的更換&#xff0c;讓你的系統管理更順暢。 準備工作 在進行任何系統配置更改之前…

MySQL中InnoDB索引使用與底層原理

MySQL Server端的緩存&#xff08;查詢緩存&#xff09;是MySQL Server層的特性&#xff0c;而InnoDB的緩存&#xff08;緩沖池&#xff09;是InnoDB存儲引擎層的特性。兩者是完全獨立的。下面我們來深入探討這兩者以及InnoDB索引的原理。1. MySQL Server層的緩存 - 查詢緩存 (…

Python實戰:實現監測抖音主播是否開播并錄屏

實現這個功能,主要思路是循環檢查主播狀態 → 開播后獲取直播流地址 → 使用FFmpeg錄制。下面是一個基本的步驟表格: 步驟 關鍵行動 常用工具/庫 1 獲取主播直播間ID或唯一標識 瀏覽器開發者工具、抓包工具1 2 循環請求抖音API,查詢主播直播狀態 requests, time 3 解析API響…

init / record / required:讓 C# 對象一次成型

標簽&#xff1a; init record required with表達式 不可變性 數據模型 DTO 目錄1. init 訪問器&#xff1a;讓不可變對象的創建更靈活1.1. 概念1.1.1. 語法1.1.2. 語義1.2. 設計初衷&#xff1a;解決什么問題&#xff1f;1.3. 使用方法1.3.1. 在對象初始化器中賦值&#xff08…

每天五分鐘深度學習:神經網絡的權重參數如何初始化

本文重點 在邏輯回歸的時候,我們可以將神經網絡的權重參數初始化為0(或者同樣的值),但是如果我們將神經網絡的權重參數初始化為0就會出問題,上節課程我們已經進行了簡單的解釋,那么既然初始化為0不行,神經網絡該如何進行參數初始化呢?神經網絡的權重參數初始化是模型訓…

[論文閱讀] 告別“數量為王”:雙軌道會議模型+LS,破解AI時代學術交流困局

告別“數量為王”&#xff1a;雙軌道會議模型LS&#xff0c;破解AI時代學術交流困局 論文信息信息類別具體內容論文原標題From Passive to Participatory: How Liberating Structures Can Revolutionize Our Conferences主要作者及機構1. Daniel Russo&#xff08;丹麥奧爾堡大…

趣味學solana(介紹)

你就是那個關鍵的“守門員”&#xff01; 為了方便理解Solana&#xff0c;我們把Solana 想象成一個巨大的、24小時不停歇的足球聯賽。成千上萬的足球運動員&#xff08;用戶&#xff09;在不停地傳球、射門&#xff08;發送交易&#xff09;&#xff0c;而整個比賽的結果必須被…

分布式事務性能優化:從故障現場到方案落地的實戰手記(三)

第三部分&#xff1a;混合場景攻堅——從“單點優化”到“系統協同” 有些性能問題并非單一原因導致&#xff0c;而是鎖競爭與事務耗時共同作用的結果。以下2個案例&#xff0c;展示綜合性優化策略。 案例7&#xff1a;基金申購的“TCC性能陷阱”——從全量預留到增量確認 故障…