if(n == 1){ cout << "圆盘从" << a << "移动到" << c <<endl; } else{ hanno(n - 1,a,c,b); cout << "圆盘从" << a << "移动到" << c <<endl; hanno(n - 1,b,a,c); }
}
结果如下:
go
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
package main import"fmt"
funchanno(n int,a string,b string,c string)int {
if n == 1 { fmt.Printf("圆盘从%s移动到%s\n",a,c) } else { hanno(n - 1,a,c,b) fmt.Printf("圆盘从%s移动到%s\n",a,c) hanno(n - 1,b,a,c) } return0 }
funcmain() { hanno(3,"a","b","c") }
结果如下:
递归
递归算法的四条基本准则
1.基准情形。必须有某些基准情形,它无需递归就能解出。 2.不断推进。对于那些需要递归求解的情形,每一次递归调用都必须要使求解的状况朝接近基准情形的方向推进。 3.设计法则。假设所有的递归调用都能运行。 4.合成效益法则。在求解同一个问题的同一实例时,切勿在不同的递归调用中做重复性的工作 ——-摘自《数据结构与算法分析(机械工业出版社 Mark Allen Weiss著)》
递归算法的理解
1.在求f(n, other variables)的时候,你就默认f(n -1, other variables)已经被求出来了——至于怎么求的,这个是计算机通过回溯求出来的。