栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Golang中的递归函数之七个入门实战案例

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang中的递归函数之七个入门实战案例

说明

源码下载:https://github.com/zhangdapeng520/zdpgo_algorithm/tree/main/examples/09recursive/go_examples

1、求阶乘
package main

import "fmt"

// 求n的阶乘
func factorial(n int)int{
	if n<=1{
		return n
	}else{
		return n * factorial(n-1)
	}
}

func main() {
	fmt.Println(factorial(1))
	fmt.Println(factorial(2))
	fmt.Println(factorial(3))
	fmt.Println(factorial(4))
	fmt.Println(factorial(5))
}
2、二分查找
package main

import "fmt"

// 二分查找
func binarySearch(arr []int, target, low, high int)int{
	if low > high{
		return -1
	}else {
		mid := (low + high) / 2
		if target == arr[mid]{
			return mid
		}else if target < arr[mid]{
			return binarySearch(arr, target, low, mid - 1)
		}else{
			return binarySearch(arr, target, mid + 1, high)
		}
	}
}

func main(){
	arr := []int{1,2,3,4,5,6}
	i := binarySearch(arr, 3, 0, len(arr))
	if i == -1 {
		print("要查找的元素不存在")
		return
	}
	fmt.Println(i, arr[i])
}
3、文件夹磁盘占用量
package main

import (
	"fmt"
	"os"
	"path/filepath"
)

// 判断文件是否存在
func exists(path string) bool {
    _, err := os.Stat(path)
    return err == nil || os.IsExist(err)
}

// 获取文件大小
func getFileSize(path string) int64 {
    if !exists(path) {
        return 0
    }
    fileInfo, err := os.Stat(path)
    if err != nil {
        return 0
    }
    return fileInfo.Size()
}

// 文件夹占用磁盘大小
func diskUsage(path string) (int64, error) {
    var size int64
    err := filepath.Walk(path, func(_ string, info os.FileInfo, err error) error {
        if err != nil {
            return err
        }
        if !info.IsDir() {
            size += info.Size()
        }
        return err
    })
    return size, err
}

func main(){
	fmt.Println(diskUsage("D:\BaiduNetdiskWorkspace\文档"))
}
4、斐波那契数列
package main

import "fmt"

// 求斐波那契数列第n位
func fibonacci(n int) (int, int) {
	if n<=1{
		return n, 0
	}else{
		a, b := fibonacci(n - 1)
		return a + b, a
	}
}

func main() {
	fmt.Println(fibonacci(1))
	fmt.Println(fibonacci(2))
	fmt.Println(fibonacci(3))
	fmt.Println(fibonacci(4))
	fmt.Println(fibonacci(5))
	fmt.Println(fibonacci(6))
	fmt.Println(fibonacci(7))
	fmt.Println(fibonacci(8))
	fmt.Println(fibonacci(9))
}
5、求和
package main

import "fmt"

// 求切片的前n个数的和
func linearSum(arr []int, n int) int {
	if n == 0{
		return 0
	}else{
		return linearSum(arr, n-1) + arr[n-1]
	}
}

func main() {
	arr := []int{1,2,3,4,5,55,5,666,6,66,66}
	fmt.Println(linearSum(arr, 0))
	fmt.Println(linearSum(arr, 1))
	fmt.Println(linearSum(arr, 2))
	fmt.Println(linearSum(arr, 3))
	fmt.Println(linearSum(arr, 4))
}
6、列表元素反转
package main

import "fmt"

// 翻转切片
func reverse(arr []int, start, stop int) {
	if start < stop -1 {
		arr[start], arr[stop-1] = arr[stop-1], arr[start]		
		reverse(arr, start+1, stop-1)
	}
}

func main() {
	arr := []int{1, 2, 3, 4, 5}
	fmt.Println(arr)
	reverse(arr, 0, len(arr))
	fmt.Println(arr)
}
7、求幂
package main

import "fmt"

// 求x的n次方
func power(x, n int) int {
	if n==0{
		return 1
	}else{
		mid := power(x, n/2) // 乘一半
		result := mid * mid // 幂一定是 一半 * 一半
		if n%2==1{ // 如果是奇数个,还需要再乘一次x
			result *= x
		}
		return result
	}
}

func main() {
	fmt.Println(power(2,1))
	fmt.Println(power(2,2))
	fmt.Println(power(2,3))
	fmt.Println(power(2,4))
	fmt.Println(power(2,5))
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/643971.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号