parent
2acace92c0
commit
d037acd3e6
@ -17,4 +17,21 @@ func fact(n int) int {
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println(fact(7))
|
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
|
55d9633a4f0fd0eac2f243b2a2ddb35ae91ed4a9
|
||||||
smWim1q9ofu
|
LnBMavPrkuf
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
$ go run recursion.go
|
$ go run recursion.go
|
||||||
5040
|
5040
|
||||||
|
13
|
||||||
|
64
public/recursion
generated
64
public/recursion
generated
@ -43,7 +43,7 @@ Here’s a classic factorial example.</p>
|
|||||||
|
|
||||||
</td>
|
</td>
|
||||||
<td class="code leading">
|
<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 class="chroma"><span class="kn">package</span> <span class="nx">main</span>
|
||||||
</pre>
|
</pre>
|
||||||
</td>
|
</td>
|
||||||
@ -83,10 +83,65 @@ base case of <code>fact(0)</code>.</p>
|
|||||||
<td class="docs">
|
<td class="docs">
|
||||||
|
|
||||||
</td>
|
</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>
|
<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>
|
<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>
|
<span class="p">}</span>
|
||||||
</pre>
|
</pre>
|
||||||
</td>
|
</td>
|
||||||
@ -103,7 +158,8 @@ base case of <code>fact(0)</code>.</p>
|
|||||||
<td class="code">
|
<td class="code">
|
||||||
|
|
||||||
<pre class="chroma"><span class="gp">$</span> go run recursion.go
|
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
@ -120,7 +176,7 @@ base case of <code>fact(0)</code>.</p>
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
var codeLines = [];
|
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>
|
||||||
<script src="site.js" async></script>
|
<script src="site.js" async></script>
|
||||||
</body>
|
</body>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user