|
|
|
|
@@ -43,7 +43,7 @@ Here’s a classic factorial example.</p>
|
|
|
|
|
|
|
|
|
|
</td>
|
|
|
|
|
<td class="code leading">
|
|
|
|
|
<a href="http://play.golang.org/p/smWim1q9ofu"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
|
|
|
|
<a href="http://play.golang.org/p/LnBMavPrkuf"><img title="Run code" src="play.png" class="run" /></a><img title="Copy code" src="clipboard.png" class="copy" />
|
|
|
|
|
<pre class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
|
|
|
|
</pre>
|
|
|
|
|
</td>
|
|
|
|
|
@@ -83,10 +83,65 @@ base case of <code>fact(0)</code>.</p>
|
|
|
|
|
<td class="docs">
|
|
|
|
|
|
|
|
|
|
</td>
|
|
|
|
|
<td class="code">
|
|
|
|
|
<td class="code leading">
|
|
|
|
|
|
|
|
|
|
<pre class="chroma"><span class="kd">func</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
|
|
|
|
|
<span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">fact</span><span class="p">(</span><span class="mi">7</span><span class="p">))</span>
|
|
|
|
|
</pre>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="docs">
|
|
|
|
|
<p>Closures can also be recursive, but this requires the
|
|
|
|
|
closure to be declared with a typed <code>var</code> explicitly
|
|
|
|
|
before it’s defined.</p>
|
|
|
|
|
|
|
|
|
|
</td>
|
|
|
|
|
<td class="code leading">
|
|
|
|
|
|
|
|
|
|
<pre class="chroma">
|
|
|
|
|
<span class="kd">var</span> <span class="nx">fib</span> <span class="kd">func</span><span class="p">(</span><span class="nx">n</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span>
|
|
|
|
|
</pre>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="docs">
|
|
|
|
|
|
|
|
|
|
</td>
|
|
|
|
|
<td class="code leading">
|
|
|
|
|
|
|
|
|
|
<pre class="chroma"> <span class="nx">fib</span> <span class="p">=</span> <span class="kd">func</span><span class="p">(</span><span class="nx">n</span> <span class="kt">int</span><span class="p">)</span> <span class="kt">int</span> <span class="p">{</span>
|
|
|
|
|
<span class="k">if</span> <span class="nx">n</span> <span class="p"><</span> <span class="mi">2</span> <span class="p">{</span>
|
|
|
|
|
<span class="k">return</span> <span class="nx">n</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
<span class="k">return</span> <span class="nf">fib</span><span class="p">(</span><span class="nx">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="nf">fib</span><span class="p">(</span><span class="nx">n</span><span class="o">-</span><span class="mi">2</span><span class="p">)</span>
|
|
|
|
|
</pre>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="docs">
|
|
|
|
|
<p>Since <code>fib</code> was previously declared in <code>main</code>, Go
|
|
|
|
|
knows which function to call with <code>fib</code> here.</p>
|
|
|
|
|
|
|
|
|
|
</td>
|
|
|
|
|
<td class="code leading">
|
|
|
|
|
|
|
|
|
|
<pre class="chroma">
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</pre>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="docs">
|
|
|
|
|
|
|
|
|
|
</td>
|
|
|
|
|
<td class="code">
|
|
|
|
|
|
|
|
|
|
<pre class="chroma"> <span class="nx">fmt</span><span class="p">.</span><span class="nf">Println</span><span class="p">(</span><span class="nf">fib</span><span class="p">(</span><span class="mi">7</span><span class="p">))</span>
|
|
|
|
|
<span class="p">}</span>
|
|
|
|
|
</pre>
|
|
|
|
|
</td>
|
|
|
|
|
@@ -103,7 +158,8 @@ base case of <code>fact(0)</code>.</p>
|
|
|
|
|
<td class="code">
|
|
|
|
|
|
|
|
|
|
<pre class="chroma"><span class="gp">$</span> go run recursion.go
|
|
|
|
|
<span class="go">5040</span></pre>
|
|
|
|
|
<span class="go">5040
|
|
|
|
|
</span><span class="go">13</span></pre>
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
@@ -120,7 +176,7 @@ base case of <code>fact(0)</code>.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<script>
|
|
|
|
|
var codeLines = [];
|
|
|
|
|
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"fmt\"\u000A');codeLines.push('func fact(n int) int {\u000A if n \u003D\u003D 0 {\u000A return 1\u000A }\u000A return n * fact(n-1)\u000A}\u000A');codeLines.push('func main() {\u000A fmt.Println(fact(7))\u000A}\u000A');codeLines.push('');
|
|
|
|
|
codeLines.push('');codeLines.push('package main\u000A');codeLines.push('import \"fmt\"\u000A');codeLines.push('func fact(n int) int {\u000A if n \u003D\u003D 0 {\u000A return 1\u000A }\u000A return n * fact(n-1)\u000A}\u000A');codeLines.push('func main() {\u000A fmt.Println(fact(7))\u000A');codeLines.push(' var fib func(n int) int\u000A');codeLines.push(' fib \u003D func(n int) int {\u000A if n \u003C 2 {\u000A return n\u000A }\u000A return fib(n-1) + fib(n-2)\u000A');codeLines.push(' }\u000A');codeLines.push(' fmt.Println(fib(7))\u000A}\u000A');codeLines.push('');
|
|
|
|
|
</script>
|
|
|
|
|
<script src="site.js" async></script>
|
|
|
|
|
</body>
|
|
|
|
|
|