parent
2acace92c0
commit
d037acd3e6
@ -17,4 +17,21 @@ func fact(n int) int {
|
||||
|
||||
func main() {
|
||||
fmt.Println(fact(7))
|
||||
|
||||
// Closures can also be recursive, but this requires the
|
||||
// closure to be declared with a typed `var` explicitly
|
||||
// before it's defined.
|
||||
var fib func(n int) int
|
||||
|
||||
fib = func(n int) int {
|
||||
if n < 2 {
|
||||
return n
|
||||
}
|
||||
return fib(n-1) + fib(n-2)
|
||||
|
||||
// Since `fib` was previously declared in `main`, Go
|
||||
// knows which function to call with `fib` here.
|
||||
}
|
||||
|
||||
fmt.Println(fib(7))
|
||||
}
|
||||
|
@ -1,2 +1,2 @@
|
||||
9bfb2f870007082835a3c0efaac9aa1c3bc2c15c
|
||||
smWim1q9ofu
|
||||
55d9633a4f0fd0eac2f243b2a2ddb35ae91ed4a9
|
||||
LnBMavPrkuf
|
||||
|
@ -1,2 +1,3 @@
|
||||
$ go run recursion.go
|
||||
5040
|
||||
13
|
||||
|
64
public/recursion
generated
64
public/recursion
generated
@ -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>
|
||||
|
Loading…
x
Reference in New Issue
Block a user