1、函数返回值
package main
import "fmt"
var num int = 10;
var rslt1, rslt2 int;
var rslt3, rslt4 int;
func main() {
rslt1, rslt2 = getX2AndX3_1(num);
fmt.Printf("num = %d, 2x num = %d, 3x num = %d\n", num, rslt1, rslt2)
rslt3, rslt4 = getX2AndX3_2(num);
fmt.Printf("num = %d, 2x num = %d, 3x num = %d\n", num, rslt3, rslt4)
}
func getX2AndX3_1(input int) (int, int) {
return 2 * input, 3 * input;
}
/**
* 这种方式尽量避免使用,代码可读性差
*/
func getX2AndX3_2(input int) (rslt3 int, rslt4 int) {
rslt3 = 2 * input;
rslt4 = 3 * input;
return
}
2、递归
package main
import "fmt"
var num int = 10;
var rslt1, rslt2 int;
var rslt3, rslt4 int;
func main() {
for i := 0; i < 10; i++ {
result := fibonacci(i);
fmt.Printf("fibonacci(%d) is: %d\n", i, result);
}
}
func fibonacci(n int) int {
res := 0;
if(n <= 1) {
res = 1;
} else {
res = fibonacci(n-1) + fibonacci(n-2);
}
return res;
}
3、闭包
package main
import "fmt"
func main() {
funcAddBmp := MakeAddSuffix(".bmp");
funcAddJpg := MakeAddSuffix(".jpg");
fmt.Println("filename with bmp is ", funcAddBmp("rantu"));
fmt.Println("filename whth jpg is ", funcAddJpg("9app"));
}
func MakeAddSuffix(suffix string) func(string) string {
return func(name string) string {
return name + suffix;
}
}
5、 利用缓存实现fibonacci数列
package main
import "fmt"
import "time"
const LIMIT = 41;
var fibs [LIMIT]uint64;
func main() {
var result uint64 = 0
start := time.Now();
for i := 0; i < LIMIT; i++ {
result = fibonacci(i);
fmt.Printf("fibonacci(%d) is: %d\n", i, result)
}
end := time.Now();
durtion := end.Sub(start);
fmt.Println("cost time :", durtion);
}
func fibonacci(n int) uint64 {
var res uint64;
if fibs[n] != 0 {
return fibs[n];
}
if(n <= 1) {
res = 1;
} else {
res = fibonacci(n-1) + fibonacci(n-2);
}
fibs[n] = res;
return res;
}
网友评论