C語言(長期更新)第8講 函數遞歸

C語言(長期更新)

第8講:函數遞歸

????跟著潼心走,輕松拿捏C語言,困惑通通走,一去不回頭~歡迎開始今天的學習內容,你的支持就是博主最大的動力


目錄

C語言(長期更新)

第8講

函數遞歸

知識回顧

?前言

8.1 什么是遞歸

8.1.1 where——啥時候用

8.1.2 how——怎么用

8.1.3 what——具體含義

8.2 遞歸實例1:計算階乘

8.2.1分析與代碼實現

8.2.2 畫圖分析

8.3 遞歸實例2:順序打印一個整數的每一位

8.3.1分析與代碼實現

8.3.2 畫圖分析


知識回顧

上節課我們學習了一些VS實用的調試技巧,今天我們來學習函數遞歸的內容,坐穩了,我們發車,gogogo!


?前言

我們在先前解決問題時常常會用到循環來解決一些重復的操作,往往寫代碼時需要寫很多行代碼。今天我們來介紹一種全新解決問題的方法——函數遞歸(Recursion)

8.1 什么是遞歸

遞歸就是函數自己調用自己

舉個🌰

比如上面的代碼,在main函數中調用main函數,導致main函數無限調用,無限次打印"hehe"

運行一段時間后,彈出報錯警告,我們看到報錯信息中有一個stack overflow,就是棧溢出的意思。為什么會這樣捏?因為每次main函數的運行都需要在內存中開辟空間,空間不夠用了就造成棧溢出了。

上面是函數遞歸的錯誤使用,只是為了方便說明,下面我們就來詳細介紹一下函數遞歸

8.1.1 where——啥時候用

函數遞歸常用于將一個大規模的問題轉化為規模較小的同類子問題,直至問題不可繼續拆解

這種大化小的思想賦予了函數遞歸常常以幾行簡單代碼就能解決復雜問題的特性

8.1.2 how——怎么用

  • 函數遞歸是有限制條件的,達到限制條件終止遞歸
  • 每次遞歸都會逼近這個限制條件,以避免棧溢出

8.1.3 what——具體含義

遞歸二字遞為遞推,歸為回歸

8.2 遞歸實例1:計算階乘

8.2.1分析與代碼實現

我們知道一個數字的階乘(Factorial)就是從1乘到這個數的積。可我們也可以換一種思路

你想,1!=1,2!=1*2=1!*2,...依此類推可得 n!=(n-1)!*n

唉,這不就遞歸了嗎,算一個數的階乘被轉化為算比他小1的數的階乘,比他小1的結成有轉化為哦算比他小2的數的階乘。以大化小,妙哉!

下面我們寫代碼

8.2.2 畫圖分析

先逐層函數遞歸,將大的問題拆解,層層深挖,推至無處可推,在逐層回歸問題,一步一步將值代入,這就是遞歸。

8.3 遞歸實例2:順序打印一個整數的每一位

8.3.1分析與代碼實現

給一個數我們最容易得到的就是這個數的個位

想要拿到最高位的數字最容易想到的辦法就是一層一層剝下來。每次除以10剝取最后一位,再取余

每一次都是對取過余的數做除以10的操作這就是重復性的同類子問題,因此我們可以使用遞歸

下面我們寫代碼

8.3.2 畫圖分析


?? ?好了今天的學習內容就到這里啦,謝謝你的陪伴,我是潼心,下次再見~如果這篇文章對你有幫助的話。請務必給主播一個一鍵三連,球球了,這對主播很重要~

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

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

相關文章

[硬件電路-129]:模擬電路 - 繼電器的工作原理、關鍵指標、常用芯片與管腳定義

一、工作原理繼電器是一種基于電磁感應原理的自動開關裝置,通過控制小電流電路實現大電流電路的通斷。其核心結構包括:電磁鐵(線圈鐵芯):通電時產生磁場,吸引銜鐵動作。觸點系統:包含常開觸點&a…

Haproxy調度算法 - 靜態算法介紹與使用

文章目錄一、概述二、socat工具三、static-rr四、firstHAProxy通過固定參數 balance 指明對后端服務器的調度算法,該參數可以配置在listen或backend選項中。HAProxy的調度算法分為靜態和動態調度算法,但是有些算法可以根據參數在靜態和動態算法中相互轉換…

模擬激光相機工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

模擬激光相機工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20

AWS Blockchain Templates:快速部署企業級區塊鏈網絡的終極解決方案

無需精通底層架構,一鍵搭建Hyperledger Fabric或以太坊網絡!AWS Blockchain Templates 可幫助您快速基于不同的區塊鏈框架在 AWS 上創建和部署區塊鏈網絡。區塊鏈是一種分布式數據庫技術,用于維護不斷增長的交易記錄和智能合約集合&#xff0…

Vue 服務端渲染 Nuxt 使用詳解

Nuxt 是基于 Vue 的高層框架,專注于服務器端渲染應用開發。它封裝了繁瑣的配置和通用模式,提供了開箱即用的 SSR 功能,使開發者能夠專注于編寫業務邏輯。 1. Nuxt 的核心特性 SSR 支持:默認支持服務端渲染,提高應用性…

使用ACK Serverless容器化部署大語言模型FastChat

核心概念 阿里云ACK Serverless:是一種基于 Kubernetes 的無服務器容器服務。用戶無需管理底層節點和服務器,即可快速部署容器化應用,并根據實際使用的 CPU 和內存資源按需付費,只專注于應用本身而非基礎設施管理。 FastChat&…

最新Android Studio漢化教程--兼容插件包

[ ] 軟件版本:Android Studio Meerkat Feature Drop | 2024.3.2 Build #AI-243.25659.59.2432.13423653, built on April 30, 2025 Runtime version: 21.0.613368085-b895.109 amd64 VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o. Toolkit: sun.awt.windows.WT…

Unity_數據持久化_IXmlSerializable接口

Unity數據持久化 三、XML數據持久化 3.5 IXmlSerializable接口 3.5.1 IXmlSerializable接口基礎概念 什么是IXmlSerializable接口: IXmlSerializable 是.NET框架提供的一個接口,允許類自定義XML序列化和反序列化的過程。當默認的XML序列化行為無法滿足需…

如何快速解決PDF解密新方法?

有時從網絡下載的PDF文檔會帶有加密限制,導致無法編輯、復制或打印。它的體積僅約10MB,無需安裝,解壓即用。遇到受限制的文件時,只需將其拖入界面,選擇是否覆蓋原文件,點擊執行,瞬間完成解密。「…

譯|數據驅動智慧供應鏈的構成要素與關聯思考

數據質量,通過識別關鍵決策和瓶頸構建信息供應鏈。該模型適用于優化庫存管理、自動化物流、預測需求、實現產品全生命周期追溯及應對突發風險。例如,通過AI機器人自動管理倉庫,或利用數字孿生模擬和優化全球采購網絡。 匯總來自三篇文章&…

OS21.【Linux】環境變量

目錄 1.與環境變量有關的實驗 A.對比命令和自制程序的運行 為什么.像ls、pwd這樣的命令運行是不需要加路徑? 執行自制程序而不加路徑的方法,看看PATH環境變量 方法1:將自制程序移動到系統的搜索路徑下 方法2:臨時修改PATH環境變量 B.查看系統中所有環境變量 解釋幾個常…

加密流量論文復現:《Detecting DNS over HTTPS based data exfiltration》(上)

本文將以我個人的理解去閱讀該篇流量加密論文,并在下一篇盡力對其中的實驗部分進行復現。話不多說,先從論文開始著手。 內容介紹 傳統的DNS(Domain Name System)協議是以明文傳輸的。DNS作為互聯網的基礎設施,最初設計時主要考慮的是功能和效…

Apache RocketMQ 中Message (消息)的核心概念

好的,我們來深入理解一下 Apache RocketMQ 中 Message (消息) 這個核心概念。這份文檔詳細闡述了消息的定義、在模型中的位置、內部屬性、約束和使用建議。 你可以將 Message 看作是 RocketMQ 系統中數據傳輸和處理的最小原子單位。它承載了業務數據,并附…

C 語言問題

1. C語言中 union 與 struct 的區別類型structunion內存分配機制編譯器為每個成員?獨立分配內存空間,總內存大小 所有成員大小之和(考慮內存對齊)所有成員?共享同一段內存空間,總內存大小 ?最大成員的大小?數據存儲特性1. 所…

[ LeetCode優選算法專題一雙指針-----盛最多的水]

1.題目鏈接 LeetCode盛最多的水 2.題目描述 3.題目解析 問題本質分析 "盛最多水的容器" 問題可以抽象為:在坐標軸上有 n 條垂直線段,第 i 條線段的兩個端點分別是 (i, 0) 和 (i, height [i])。找到兩條線段,使得它們與 x 軸共同…

舊筆記本電腦如何安裝飛牛OS

01引言隨著電子產品的更新換代,我們有很多的電子產品已經滿足不了現在的工作需求和日常娛樂了,比如:用了很久厚重筆記本電腦放在現在辦公也是有點吃力了,我們現在換新了舊的還不想放在那里吃灰,怎么辦呢?我…

某金服Java面試終極指南:25題完整解析與場景化方案

涵蓋分布式鎖、緩存、事務、高并發等金融系統核心考點,附解決方案與抗風險設計一、分布式鎖深度解決方案 1. Redis分布式鎖完整實現 // 原子加鎖 防死鎖 String uuid UUID.randomUUID().toString(); Boolean locked redisTemplate.opsForValue().setIfAbsent(&qu…

MATLAB 2025a的下載以及安裝,安裝X310的測試附加功能(附加安裝包)

首先將安裝包下載到本地中之后解壓該文件夾,打開文件發現有兩個文件,其中crach文件夾中是破解matlab所用到的文件。而另一個壓縮包就是需要安裝的文件,要先解壓在安裝。在安裝之前將網絡斷開,不然可能破解不成功,先進入…

Scala實用編程(附電子書資料)

概述 Scala 是一種多范式編程語言,結合了面向對象編程(OOP)和函數式編程(FP)的特性電子書資料:https://pan.quark.cn/s/88737d4a680d Scala 的核心特點多范式融合 既支持面向對象編程(類、繼承、…

數據結構(8)雙向鏈表

目錄 一、概念與結構 二、雙向鏈表的實現 1、初始化 2、尾插 3、頭插 4、尾刪 5、頭刪 6、在指定位置之后插入結點 7、刪除指定位置的結點 三、完整參考代碼 一、概念與結構 這里的雙向鏈表是指帶頭的的雙向循環鏈表,這里的“帶頭”和之前所說的“頭結…