使用遞歸編寫的C++程序,用於計算兩個數的乘積
遞歸是一種從同一個函數本身呼叫函數的技術。必須有一些基本或終止條件來結束遞歸呼叫。遞歸過程對於用更少的程式碼執行複雜的迭代求解非常有幫助,並且透過子操作尋找更容易的求解方法。
在本文中,我們將討論在 C 中執行兩個數字之間的乘積(乘法)的遞歸方法。首先我們了解基本原理、遞歸函數呼叫語法、演算法和原始碼。
使用遞歸的乘法
在高階語言中,有乘法運算子可以直接執行乘法。然而我們知道,乘法其實是重複的加法。所以A*B的結果就是A、B的重複相加次數,或是可以說B、A的重複相加次數。每當重複時,我們可以使用遞歸來做到這一點。讓我們先看看遞歸函數定義語法。
文法
<return type> function_name ( parameter list ) { if ( base condition ) { terminate recursive call } recursive function call: function_name ( updated parameter list ) }
演算法
讓我們來看看使用遞歸執行乘法的演算法。
- #定義一個函數multiply(),它接受兩個數字A和B
- 如果 A < B,則
< B,则
- 傳回乘法( B, A )
- 否則當B不為0時,則
- 傳回 A 乘法( A, B - 1 )
- 否則
- 返回0
- 如果結束
- 如果 A < B,則
< B,则
- 函數定義結束
- 讀取兩個輸入 A 和 B
- res = 乘法( A, B )
- 不顯示任何內容
範例
#include <iostream> #include <sstream> using namespace std; int multiply( int A, int B) { if( A < B ) { return multiply( B, A ); } else if( B != 0 ) { return A + multiply( A, B - 1 ); } else { return 0; } } int main() { cout << "Multiplication of 5, 7 is: " << multiply( 5, 7 ) << endl; cout << "Multiplication of 8, 0 is: " << multiply( 8, 0 ) << endl; cout << "Multiplication of 25, 3 is: " << multiply( 25, 3 ) << endl; cout << "Multiplication of 9, 1 is: " << multiply( 9, 1 ) << endl; }
輸出
Multiplication of 5, 7 is: 35 Multiplication of 8, 0 is: 0 Multiplication of 25, 3 is: 75 Multiplication of 9, 1 is: 9
看,在這個程式中,函數的參數 A 和 B 都是兩個整數。現在,在每一步之後,它都會將第二個參數 B 減 1,並將 A 與 A 本身相加。像這樣,函數正在執行乘法過程。
結論
遞歸是從函數本身呼叫相同函數的過程。當遞歸呼叫函數時,我們稍微更新或改變參數集,以免同樣的效果一次又一次出現,然後將問題劃分為更小的子問題,並透過自下而上的方式解決這些較小的問題來解決問題。幾乎任何可以使用循環實現的東西也可以使用遞歸實現。在本文中,我們看到了使用遞歸將兩個整數相乘的簡單過程。整數多次相加,得到最終的乘法結果。
以上是使用遞歸編寫的C++程序,用於計算兩個數的乘積的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C++函數的遞歸深度受到限制,超過此限制會導致堆疊溢位錯誤。限制值因係統和編譯器而異,通常在1000到10000之間。解決方法包括:1.尾遞歸最佳化;2.尾呼叫;3.迭代實作。

是的,C++Lambda表達式可以透過使用std::function支援遞歸:使用std::function捕捉Lambda表達式的參考。透過捕獲的引用,Lambda表達式可以遞歸呼叫自身。

遞歸演算法透過函數自呼叫解決結構化的問題,優點是簡潔易懂,缺點是效率較低且可能發生堆疊溢位;非遞歸演算法透過明確管理堆疊資料結構避免遞歸,優點是效率更高且避免堆疊溢出,缺點是程式碼可能更複雜。選擇遞歸或非遞歸取決於問題和實現的特定限制。

給定兩個字串str_1和str_2。目標是使用遞歸過程計算字串str1中子字串str2的出現次數。遞歸函數是在其定義中呼叫自身的函數。如果str1是"Iknowthatyouknowthatiknow",str2是"know"出現次數為-3讓我們透過範例來理解。例如輸入str1="TPisTPareTPamTP",str2="TP";輸出Countofoccurrencesofasubstringrecursi

雙曲函數是使用雙曲線而不是圓定義的,與普通三角函數相當。它從提供的弧度角傳回雙曲正弦函數中的比率參數。但要做相反的事,或者換句話說。如果我們想要根據雙曲正弦值計算角度,我們需要像雙曲反正弦運算一樣的反雙曲三角運算。本課程將示範如何使用C++中的雙曲反正弦(asinh)函數,並使用雙曲正弦值(以弧度為單位)計算角度。雙曲反正弦運算遵循下列公式-$$\mathrm{sinh^{-1}x\:=\:In(x\:+\:\sqrt{x^2\:+\:1})},其中\:In\:是\:自然對數\:(log_e\:k)

rename函數將檔案或目錄從舊名稱變更為新名稱。此操作類似於移動操作。因此,我們也可以使用此rename函數來移動檔案。此函數存在於stdio.h庫頭檔中。 rename函數的語法如下:intrename(constchar*oldname,constchar*newname);rename()函數的函數它接受兩個參數。一個是oldname,一個是newname。這兩個參數都是指向常數字元的指針,用於定義檔案的舊名稱和新名稱。如果檔案重新命名成功,則傳回零;否則,傳回非零整數。在重新命名操作期間

尾遞歸最佳化(TRO)可提高特定遞歸呼叫的效率。它將尾遞歸呼叫轉換為跳轉指令,並將上下文狀態保存在暫存器中,而不是堆疊上,從而消除對堆疊的額外呼叫和返回操作,提高演算法效率。利用TRO,我們可以針對尾遞歸函數(例如階乘計算)進行最佳化,透過將tail遞歸呼叫替換為goto語句,編譯器會將goto跳轉移化為TRO,最佳化遞歸演算法的執行。

遞歸函數是一種在字串處理中反覆呼叫自身來解決問題的技術。它需要一個終止條件以防止無限遞歸。遞歸在字串反轉和回文檢查等操作中被廣泛使用。
