Skip to content

Commit

Permalink
func 20230213
Browse files Browse the repository at this point in the history
  • Loading branch information
J-Snowwite committed Feb 13, 2023
1 parent c871b35 commit baa9e46
Show file tree
Hide file tree
Showing 5 changed files with 133 additions and 0 deletions.
23 changes: 23 additions & 0 deletions 20230213/fact.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package main

import "fmt"

//阶乘
// n! =
// n = 0 n! = 1
// n >=1 n! = n * (n-1) * (n-2) *.....* 1
// f(n) = n! = n * f(n - 1)
// 分治 => 大问题分解为多个相同的小问题 (小问题可以继续拆分,知道某一个可以解决的子问题)
// 递归调用 = > 函数直接或者间接调用自己 (总有一个停止条件)--大部分可以转化为 for 循环

func f(n int64) int64 {
if n == 0 {
return 1
}
return n * f(n-1)
}

func main() {
fmt.Println(f(3))

}
16 changes: 16 additions & 0 deletions 20230213/hannuota.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package main

// n 个盘子 star(开始) end(终点) temp(借助)
// n start ->temp ->end
// n-1 starr ->end ->temp
// start -> end
// n-1 temp -> start -> end
// 终止条件 n=1 直接返回

func hnt(start, end, temp string, layer int) {

}

func main() {

}
28 changes: 28 additions & 0 deletions 20230213/quote.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package main

import "fmt"

func test1(n int) {
n = 1
//值类型是两个不同的地址中存储的值,所以不影响
}

func test2(s []int) {
fmt.Printf("%p\n", s)
//打印出来后和 b 的值一致
s[0] = 1
//引用类型是两个不同变量存储的指向同一个地址的值,所以影响
}

func main() {

a := 0
b := make([]int, 10)
test1(a)
test2(b)
//传递值类型参数,不会有影响
fmt.Println(a)
//传递引用类型参数,函数内部赋值会有影响
fmt.Println(b)
fmt.Printf("%p\n", b)
}
20 changes: 20 additions & 0 deletions 20230213/returnValue.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package main

import (
"fmt"
)

func test3(flag bool) int {
if flag {
return 1
//函数中一旦碰到return 就不会往下执行逻辑代码了
}
fmt.Println("return beforce")
return 2
}

func main() {
fmt.Println(test3(true))
fmt.Println(test3(false))

}
46 changes: 46 additions & 0 deletions 20230213/valueType.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package main

import (
"fmt"
)

func main() {

//值类型(存储值)
//int float point 数组 结构体
//在内存中申请内存新的空间,将age的值拷贝到 tmpAge
//修改 tmpAge 不影响 age
//tmpAge 和 age 的在内存空间中存储的是值,所以不影响
//两个变量的地址是不一样的
age := 30
tmpAge := age
tmpAge = 31
fmt.Println(age, tmpAge)
fmt.Printf("%p %p\n", &age, &tmpAge)

//引用类型(存储地址)
//切片 映射 接口
//申请内存空间--存储地址【也就是指针】
//在内存中申请新的空间,将 user 的值拷贝到 tmpUser 中
//修改 tmpUser 中元素的值,是指针指向地址空间的值,但是指针没有变化
//修改任意指向空间地址的值,访问的目的不变【地址共享】,所以值会变
//两个变量的地址是一样的
user := make([]string, 10)
tmpUser := user
tmpUser[0] = "SS"
fmt.Printf("%#v %#v \n", user, tmpUser)
//打印变量的值--%p 打印值
fmt.Printf("%p %p\n\n\n\n", user, tmpUser)

//指针--值类型--指针本身就是值,但是存在一个解引用操作,可以操作其他值
pointA := &age
pointB := pointA
//值操作
//pointB = &tmpAge
//fmt.Printf("%#v %#v %#v %#v\n", pointA, pointB, *pointA, *pointB)

//解引用操作 * 取指针指向地址的值----值相同
*pointA = 33
fmt.Printf("%#v %#v %#v %#v\n", pointA, pointB, *pointA, *pointB)

}

0 comments on commit baa9e46

Please sign in to comment.