zoukankan      html  css  js  c++  java
  • GO语言复合类型05---递归

    package main
    
    import (
    	"fmt"
    	"time"
    )
    
    /*
    ·递归就是自己调自己
    ·递归一定要有终止条件(否则就是无限死循环)
    */
    
    /*使用循环求连续自然数的和*/
    func GetSumLoop(n int) int {
    	var sum int
    	for i := 1; i <= n; i++ {
    		sum += i
    	}
    	return sum
    }
    
    /*递归实现求连续自然数的和*/
    func GetSumRecursive(n int) int {
    	if n == 1 {
    		return 1
    	}
    	return n + GetSumRecursive(n-1)
    }
    
    /*
    斐波那契数列
    1 1 2 3 5 8 13 21 34...
    */
    func GetFibonacciRecursively(n int) int {
    	if n == 0 || n == 1 {
    		return 1
    	}
    	return GetFibonacciRecursively(n-1) + GetFibonacciRecursively(n-2)
    }
    
    /*
    使用纯循环求斐波那契数列
    */
    func GetFibonaciiLoop(n int) int {
    	var a, b = 1, 1
    	for i := 0; i < n; i++ {
    		a, b = b, a+b
    	}
    	return a
    }
    
    func main() {
    	//sum := GetSumRecursive(10)
    	//fmt.Println(sum)
    
    	/*递归算斐波那契数列耗时*/
    	startTime := time.Now().UnixNano()
    	for i := 0; i < 50; i++ {
    		fmt.Println(GetFibonacciRecursively(i))
    	}
    	endTime := time.Now().UnixNano()
    	fmt.Println("共耗时%d纳秒", endTime-startTime)
    
    	/*循环算斐波那契数列耗时*/
    	//startTime := time.Now().UnixNano()
    	//for i := 0; i < 1000; i++ {
    	//	fmt.Println(GetFibonaciiLoop(i))
    	//}
    	//endTime := time.Now().UnixNano()
    	//fmt.Println("共耗时%d纳秒", endTime-startTime)
    
    	/*
    	递归算法
    	优点:代码简洁
    	缺点:效率相比简单循环慢很多
    	*/
    }
    

      

  • 相关阅读:
    关于echarts、layer.js和jqGrid的知识点
    Aspose.Cell和NPOI生成Excel文件2
    Aspose.Cell和NPOI生成Excel文件
    关于JS嵌套点击事件的问题。
    有关二维码学习小整理
    二维码
    微信扫码登录实现原理
    C#模拟Http与Https请求框架实例
    C#中调用user32.dll库的keybd_Event函数,操作键盘
    对象数组 深拷贝
  • 原文地址:https://www.cnblogs.com/yunweiqiang/p/11830641.html
Copyright © 2011-2022 走看看