⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 recursion.html

📁 关于 C++ 的历史无须我来介绍了
💻 HTML
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">
  <link rel="stylesheet" href="css/print.css" type="text/css">
  <meta content="text/html; charset=gb2312" http-equiv="content-type">
  <title>递回(Recursion)</title>
</head>
<body>
<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>
<h1><a href="CppGossip.html">C++
Gossip:&nbsp;递回(Recursion)</a></h1>
递回(Recursion)是在函式中呼叫自身同名函式,而呼叫者本身会先被置入记忆体堆垒中,等到被呼叫者执行完毕之后,再从堆垒中取出之前被置入的函
式继续执行。“堆叠”(Stack)是一种“先进后出”的资料结构,就好比您将书本置入箱中,最先放入的书会最后才取出。 <br>
<br>
C++支援函式的递回呼叫,递回的概念较抽象,但实际应用很多,举个例子来说,求最大公因数就可以使用递回来求,下面的程式是使用递回来求最大公因数的一
个实例: <br>
<br>
<pre>#include &lt;iostream&gt; <br>using namespace std; <br><br>int gcd(int, int); <br><br>int main() { <br>    int m = 0;<br>    int n = 0; <br><br>    cout &lt;&lt; "输入两数:"; <br>    cin &gt;&gt; m &gt;&gt; n; <br><br>    cout &lt;&lt; "GCD: " <br>         &lt;&lt; gcd(m, n) &lt;&lt; endl; <br><br>    return 0; <br>} <br><br>int gcd(int m, int n) { <br>    if(n == 0) <br>        return m; <br>    else <br>        return gcd(n, m % n); <br>}</pre>
<br>
<span class="postbody">
执行结果:</span><br>
<table style="text-align: left; width: 100%;" border="0" cellpadding="2"
 cellspacing="2">
  <tbody>
    <tr>
      <td style="background-color: rgb(0, 0, 0);"><small><span
 style="color: rgb(255, 255, 255);">输入两数:10 45<br>
GCD: 5</span></small><span style="color: rgb(255, 255, 255);"><br>
      </span></td>
    </tr>
  </tbody>
</table>
<br>
上面的程式是使用辗转相除法来求最大公因数;递回具有重复执行的特性,而可以使用递回求解的程式,实际上也可以使用回圈来求解,例如下面的程式就是最大公
因数使用回圈求解的方式: <br>
<br>
<pre>#include &lt;iostream&gt; <br>using namespace std; <br><br>int gcd(int, int); <br><br>int main() { <br>    int m = 0;<br>    int n = 0; <br><br>    cout &lt;&lt; "输入两数:"; <br>    cin &gt;&gt; m &gt;&gt; n; <br><br>    cout &lt;&lt; "GCD: " <br>         &lt;&lt; gcd(m, n) &lt;&lt; endl; <br><br>    return 0; <br>} <br><br>int gcd(int m, int n) { <br>    int r = 0; <br><br>    while(n != 0) { <br>        r = m % n; <br>        m = n; <br>        n = r; <br>    } <br><br>    return m; <br>}</pre>
<br>
那么使用递回好还是使用回圈求解好?这并没有一定的答案。不过通常由于递回本身有重复执行与记忆体堆叠的特性,所以若在求解时需要使用到堆叠特性的资料结
构时,使用递回在设计时的逻辑会比较容易理解,程式码设计出来也会比较简洁,然而递回会有函式呼叫的负担,因而有时会比使用回圈求解时来得没有效率,不过
回圈求解时若使用到堆叠时,通常在程式码上会比较复杂。 <br>
<br>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -