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) /*
递归算法
优点:代码简洁
缺点:效率相比简单循环慢很多
*/
}

  

GO语言复合类型05---递归的更多相关文章

  1. GO语言复合类型04---映射

    package main import "fmt" /* 映射(map)是键值对(key-value)数据的集合 根据键key可以快速检索值value 键值的类型可以是任意的,ke ...

  2. GO语言复合类型03---切片

    切片相当于长度可以动态扩张的数组 array[start:end]从数组身上截取下标为[start,end)片段,形成切片start代表开始下标,不写默认代表从头开始切end代表结束下标(本身不被包含 ...

  3. GO语言复合类型02---数组

    package main import "fmt" /* 固定长度.固定类型的数据容器 */ /*数组的声明*/ func main031() { //var array [5]i ...

  4. GO语言复合类型01---指针

    package main /* %T 类型占位符 %v 值占位符 %p 地址(指针)占位符,只有地址才能替换%p &value 对值取地址 *addr 对地址取值 **int 指向int型指针 ...

  5. go语言 类型:基础类型和复合类型

    Go 语言中包括以下内置基础类型:布尔型:bool整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint浮点型:floa ...

  6. 带你学够浪:Go语言基础系列 - 8分钟学复合类型

    ★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) " 对于一般的语言使用者来说 ,20% ...

  7. C语言中的复合类型

    复合类型 一.掌握的类型 1. 指针数组 int * arr[10]; //arr是一个数组,有10个元素,每个元素都是一个指针,即arr是一个指针数组 int a,b,c,d; arr[0] = & ...

  8. struts复合类型传值(对象传值)

    01:导包,配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version ...

  9. postgresql 函数 参数为复合类型

    postgresql没有存储过程,但是函数功能很强大. 在近期开发的电商管理平台中,对于产品的类目管理,设计时有个属性字段,设为字符数组,但是EF不支持数组的操作,所以在添加和修改类目时,需要对属性的 ...

随机推荐

  1. 把握好集成测试大关,ERP就成功了一大半

    欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 前段时间收到一个朋友的信息,说他们目前正在实施ERP系统,已经到了集成测试环节了,但整个测试过程下来并不是太理想,很多接口不通,功能也还在开 ...

  2. 1058 A+B in Hogwarts

    If you are a fan of Harry Potter, you would know the world of magic has its own currency system -- a ...

  3. 1089 Insert or Merge

    According to Wikipedia: Insertion sort iterates, consuming one input element each repetition, and gr ...

  4. Weekly Contest 137

    1046. Last Stone Weight We have a collection of rocks, each rock has a positive integer weight. Each ...

  5. .Net之配置文件

    1. 说明 默认情况下读取配置Configuration的默认优先级:ConfigureAppConfiguration(自定义读取)>CommandLine(命令行参数)>Environ ...

  6. Typora+PicGo配置图床神器(图片链接URL)

    目录 1.下载Typora 2.下载PicGo 3.Typora 配置 1.下载Typora 有能力科学的小伙伴,可以从官网下载,地址为Typora 向下滚动,点击Downloda后,选择自己的操作系 ...

  7. Python中的socket网络模块

    目录 Socket 服务端(server.py) 客户端(client.py) socket中的一些常用方法 Socket 对象(内建)方法 Python Internet 模块 Python3 提供 ...

  8. 深入浅出带你玩转sqlilabs(五)-布尔/延时盲注与二次注入

    SQL测试-基于布尔,延时盲注 布尔,延时注入常用到的判断语句 regexp regexp '^xiaodi[a-z]' 匹配xiaodi及xiaodi...等 if if(条件,5,0) 条件成立 ...

  9. 动手实现一个适用于.NET Core 的诊断工具

    前言 大家可能对诊断工具并不陌生,从大名鼎鼎的 dotTrace,到 .NET CLI 推出的一系列的高效诊断组件(dotnet trace,dotnet sos,dotnet dump)等, 这些工 ...

  10. 百度地图api根据用户IP获取用户位置(PHP)

    1.百度地图开放平台找的你的ak ,链接:http://lbsyun.baidu.com/apiconsole/key 2.获取用户ip地址(外网ip 服务器上可以获取用户外网Ip 本机ip地址只能获 ...