【C語言練習】047. 理解遞歸與循環的轉換

047. 理解遞歸與循環的轉換

  • 047. 理解遞歸與循環的轉換
    • 1. 遞歸與循環的基本概念
        • 遞歸
        • 循環
    • 2. 遞歸與循環的轉換
      • 示例1:計算階乘
      • 示例2:漢諾塔問題
    • 3. 遞歸與循環的適用場景
        • 遞歸:
        • 循環:
      • 一、遞歸的適用場景與代碼示例
        • 1. 分治問題
        • 2. 樹形結構遍歷
        • 3. 復雜狀態問題
      • 二、循環的適用場景與代碼示例
        • 1. 線性數據遍歷
        • 2. 確定次數的重復操作
        • 3. 用戶交互與實時處理
      • 三、遞歸與循環的對比與選擇
        • 1. 性能對比
        • 2. 選擇建議
      • 四、進階技巧

047. 理解遞歸與循環的轉換

在C語言中,遞歸和循環是兩種常用的控制結構,它們可以實現類似的功能,但實現方式和適用場景有所不同。理解遞歸與循環的轉換對于優化代碼和解決復雜問題非常重要。

1. 遞歸與循環的基本概念

遞歸

遞歸是一種函數調用自身的技術,通常用于解決可以分解為更小子問題的問題。遞歸函數需要滿足兩個條件:

  • 遞歸終止條件:用于結束遞歸調用的條件。

  • 遞歸關系:將問題分解為更小的子問題,并調用自身解決這些子問題。

遞歸的優點是代碼簡潔、邏輯清晰,但缺點是可能會導致棧溢出(遞歸調用過深)和性能開銷(函數調用的開銷)。

循環

循環是一種重復執行某段代碼直到滿足某個條件的控制結構。常見的循環結構包括 forwhiledo-while 循環。循環的優點是效率高、占用內存少,但缺點是代碼可能不如遞歸直觀。

2. 遞歸與循環的轉換

許多遞歸問題可以通過循環來實現,反之亦然。以下是一些常見的遞歸與循環轉換的例子。

示例1:計算階乘

遞歸實現

#include <stdio.h>// 遞歸計算階乘
long long factorial(int n) {if (n <= 1) {return 1;}return n * factorial(n - 1);
}int main() {int n;printf("請輸入一個非負整數:");scanf("%d", &n);printf("%d 的階乘是:%lld\n", n, factorial(n));return 0;
}

循環實現

#include <stdio.h>// 循環計算階乘
long long factorial(int n) {long long result = 1;for (int i = 1; i <= n; i++) {result *= i;}return result;
}int main() {int n;printf("請輸入一個非負整數:");scanf("%d", &n);printf("%d 的階乘是:%lld\n", n, factorial(n)

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

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

相關文章

我的創作紀念日——《驚變256天》

我的創作紀念日——《驚變256天》 機緣收獲日常成就憧憬 最近&#xff0c;博主收到了 CSDN 發來的系統消息&#xff0c;這才驚覺&#xff0c;自上次第128天創作紀念日之后&#xff0c;竟又悄然走過了 128 天。站在 256 天這個頗具意義的里程碑前回望&#xff0c;博主在2023 年 …

Redis 事務與管道:原理、區別與應用實踐

在現代分布式系統開發中&#xff0c;Redis 作為高性能的內存數據庫&#xff0c;其事務處理和管道技術是開發者必須掌握的核心知識點。本文將深入探討 Redis 事務和管道的實現原理、使用場景、性能差異以及最佳實踐&#xff0c;幫助開發者根據實際需求選擇合適的技術方案。 一、…

Mysql 8.0.32 union all 創建視圖后中文模糊查詢失效

記錄問題,最近在使用union all聚合了三張表的數據,創建視圖作為查詢主表,發現字段值為中文的篩選無法生效.......... sql示例: CREATE OR REPLACE VIEW test_view AS SELECTid,name,location_address AS address,type,"1" AS data_type,COALESCE ( update_time, cr…

Spatial Transformer Layer

我們知道cnn是無法識別到經過縮放和旋轉的圖片的,但是這個spatial transformer這個neutral network是可以做到的,可以被放到cnn里 接下來就是講解一個空間變換層地例子:我們可以看到,layerl就是layerl-1經過平移得到的,其中,我們layerl中的每一個元素,是上一層每一個元素與權重…

spark-standalone

一、定義&#xff1a;Standalone 模式是一種獨立的集群部署模式&#xff0c;自帶完整服務&#xff0c;可單獨部署到一個集群中&#xff0c;無需依賴任何其他資源管理系統。 二、配置步驟 1.和前面一樣拉到hadoop101的/opt/module這個目錄里面。 2.壓縮 3.重命名為spark-sta…

Vim編輯器命令模式操作指南

Vim 的命令模式&#xff08;即 Normal 模式&#xff09;是 Vim 的核心操作模式&#xff0c;用于執行文本編輯、導航、搜索、保存等操作。以下是命令模式下的常用操作總結&#xff1a; 1. 模式切換 進入命令模式&#xff1a;在任何模式下按 Esc 鍵&#xff08;可能需要多次按&a…

網絡體系結構(OSI,TCP/IP)

網絡體系結構 一、設計分層網絡模型 簡化設計&#xff1a;分層將復雜的大系統分解成小模塊&#xff0c;每一層專注處理特定功能模塊化&#xff1a;每一層獨立&#xff0c;便于開發、調試、更新和維護互操作&#xff1a;不同廠家、不同系統之間可以互相兼容&#xff0c;統一標…

經典 算法

算法 算法&#xff08;Algorithm&#xff09;是指解題方案的準確而完整的描述&#xff0c;是一系列解決問題的清晰指令。簡單來說&#xff0c;算法 就是解決一個問題的具體方法和步驟。在計算機科學中&#xff0c;算法是程序設計的核心&#xff0c;它決定了程序如何執 行特定的…

【Spark】-- DAG 和寬窄依賴的核心

目錄 Spark DAG 和寬窄依賴的核心 一、什么是 DAG? 示例:WordCount 程序的 DAG 二、寬依賴與窄依賴 1. 窄依賴 2. 寬依賴 三、DAG 與寬窄依賴的性能優化 1. 減少 Shuffle 操作 2. 合理劃分 Stage 3. 使用緩存機制 四、實際案例分析:同行車判斷 五、總結 Spark D…

C#中UI線程的切換與后臺線程的使用

文章速覽 UI線程切換示例 后臺線程使用示例 兩者對比適用場景Application.Current.Dispatcher.InvokeTask.Factory.StartNew 執行同步性Application.Current.Dispatcher.InvokeTask.Factory.StartNew 一個贊&#xff0c;專屬于你的足跡&#xff01; UI線程切換 在WPF應用程序…

【HTML】個人博客頁面

目錄 頁面視圖?編輯 頁面代碼 解釋&#xff1a; HTML (<body>): 使用了更加語義化的HTML5標簽&#xff0c;例如<header>, <main>, <article>, <footer>。文章列表使用了<article>包裹&#xff0c;結構清晰。添加了分頁導航。使用了Font…

第J1周:ResNet-50算法實戰與解析

&#x1f368; 本文為&#x1f517;365天深度學習訓練營 中的學習記錄博客 &#x1f356; 原作者&#xff1a;K同學啊 我的環境 語言環境:Python3.8 編譯器:Jupyter Lab 深度學習環境:Pytorchtorch1.12.1cu113 torchvision0.13.1cu113 一、準備工作 二、導入數據 三、劃分數據…

養生:健康生活的極簡攻略

在追求高效生活的當下&#xff0c;養生也能化繁為簡。通過飲食、運動、睡眠與心態的精準調節&#xff0c;就能輕松為健康續航。 飲食上&#xff0c;遵循 “均衡、節制” 原則。早餐用一杯熱豆漿搭配水煮蛋和半個蘋果&#xff0c;喚醒腸胃活力&#xff1b;午餐以糙米飯為主食&am…

遷移 Visual Studio Code 設置和擴展到 VSCodium

本文同步發布在個人博客 遷移 Visual Studio Code 設置和擴展到 VSCodium - 萑澈的寒舍https://hs.cnies.org/archives/vscodium-migrateVisual Studio Code&#xff08;以下簡稱 VS Code&#xff09;無疑是當下最常用的代碼編輯器。盡管微軟的 VS Code 源代碼采用 MIT 協議開…

力扣654題:最大二叉樹(遞歸)

小學生一枚&#xff0c;自學信奧中&#xff0c;沒參加培訓機構&#xff0c;所以命名不規范、代碼不優美是在所難免的&#xff0c;歡迎指正。 標簽&#xff1a; 二叉樹、遞歸 語言&#xff1a; C 題目&#xff1a; 給定一個不重復的整數數組 nums 。最大二叉樹可以用下面的算…

離散制造企業WMS+MES+QMS+條碼管理系統高保真原型全解析

在離散型制造企業的生產過程中&#xff0c;庫存管理混亂、生產進度不透明、質檢流程繁瑣等問題常常成為制約企業發展的瓶頸。為了幫助企業實現全流程數字化管控&#xff0c;我們精心打造了一款基于離散型制造企業&#xff08;涵蓋單件生產、批量生產、混合生產模式&#xff09;…

Linux操作系統--進程間通信(system V共享內存)

目錄 1.system V共享內存 2.共享內存數據結構 3.共享內存函數 4.實例代碼&#xff1a; 1.system V共享內存 共享內存區是最快的IPC(進程間通信)形式。一旦這樣的內存映射到共享它的進程地址空間&#xff0c;這些進程間數據傳遞不再涉及到內核&#xff0c;換句話說是進程不再…

【C++】類與對象

目錄 1、類的定義 2、類的訪問限定符及封裝 3、類的實例化 4、類和對象的大小 5、this 指針 6、類的六個默認成員函數 構造函數 析構函數 拷貝構造函數 賦值重載函數 取地址運算符的重載函數 7、運算符重載 8、const 成員函數 9、 static 成員 10、友元 11、…

現代簡約中式通用,民國畫報風,中國風PPT模版8套一組分享

中國風PPT模版分享&#xff1a;中國風PPT模版分享https://pan.quark.cn/s/abbf75507c5f 第1套PPT模版&#xff1a;棕色調中式窗欞封面&#xff0c;水墨山水背景配白梅與燈籠流蘇&#xff0c;適用于教學課件目錄設計&#xff0c;展現濃郁的書卷氣息。 第2套PPT模版&#xff1a;米…

django擴展練習記錄

一、Django 中使用 django-apscheduler 實現定時任務 可以方便地管理周期性任務&#xff08;如每天清理緩存、定時發送郵件等&#xff09; 1. 安裝 pip install django-apscheduler -i https://pypi.tuna.tsinghua.edu.cn/simple #0.7.02.添加到應用&#xff0c;python m…