GO语言学习(二十)Go 语言递归函数

Go 语言递归函数

递归,就是在运行的过程中调用自己。

语法格式如下:

func recursion() {
   recursion() /* 函数调用自身 */
}

func main() {
   recursion()
}

Go 语言支持递归。但我们在使用递归时,开发者需要设置退出条件,否则递归将陷入无限循环中。

递归函数对于解决数学上的问题是非常有用的,就像计算阶乘,生成斐波那契数列等。


阶乘

以下实例通过 Go 语言的递归函数实例阶乘:

package main

import "fmt"

func Factorial(n uint64)(result uint64) {
    if (n > 0) {
        result = n * Factorial(n-1)
        return result
    }
    return 1
}

func main() {
    var i int = 15
    fmt.Printf("%d 的阶乘是 %d\n", i, Factorial(uint64(i)))
}
//以上实例执行输出结果为:

15 的阶乘是 1307674368000

  

原文地址:https://www.cnblogs.com/yuming1983/p/9736244.html

时间: 2024-11-12 01:54:18

GO语言学习(二十)Go 语言递归函数的相关文章

C++语言学习(十二)——C++语言常见函数调用约定

C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数就会出现堆栈异常等现象.上述现象出现在C和C++的代码混合使用的情况下或在C++程序中使用第三方库(非C++语言开发)的情况下,原因是函数调用约定(Calling Convention)和函数名修饰(Decorated Name)规则导致的.函数调用约定决定函数参数入栈的顺序,以及由调用者函数还是被

C++语言学习(十)——继承与派生

C++语言学习(十)--继承与派生 一.类之间的关系 1.类之间的组合关系 组合关系是整体与部分的关系.组合关系的特点:A.将其它类的对象作为当前类的成员使用B.当前类的对象与成员对象的生命周期相同C.成员对象在用法上与普通对象相同Computer类由其它多个部件类组合而成,当Computer销毁时,其它部件对象同时销毁. #include <iostream> using namespace std; class Memory { public: Memory() { cout <&l

C++语言学习(十四)——C++类成员函数调用分析

C++语言学习(十四)--C++类成员函数调用分析 一.C++成员函数 1.C++成员函数的编译 C++中的函数在编译时会根据命名空间.类.参数签名等信息进行重新命名,形成新的函数名.函数重命名的过程通过一个特殊的Name Mangling(名字编码)算法来实现.Name Mangling算法是一种可逆的算法,既可以通过现有函数名计算出新函数名,也可以通过新函数名逆向推导出原有函数名.Name Mangling算法可以确保新函数名的唯一性,只要命名空间.所属的类.参数签名等有一个不同,那么产生的

C++语言学习(十八)——异常处理

C++语言学习(十八)--异常处理 一.C语言异常处理 异常是指程序在运行过程中产生可预料的执行分支.如除0操作,数组访问越界.要打开的文件不存在.Bug是指程序中的错误,是不被预期的运行方式.如野指针.堆空间使用结束未释放.C语言中处理异常的方式一般是使用if....else...分支语句. double divide(double a, double b) { const double delta = 0.000000000000001; double ret = 0; if( !((-de

C++语言学习(十九)——C++类型识别

C++语言学习(十九)--C++类型识别 一.C++类型识别简介 1.C++类型识别简介 C++是静态类型语言,其数据类型是在编译期就确定的,不能在运行时更改.C++语言中,静态类型是对象自身的类型,动态类型是指针(引用)所指向对象的实际类型.RTTI(Run-Time Type Information)即运行时类型识别,C++通过RTTI实现对多态的支持.为了支持RTTI,C++提供了一个type_info类和typeid与dynamic_cast两个关键字. 2.type_info结构体 t

C++语言学习(十五)——C++抽象类与接口

C++语言学习(十五)--C++抽象类与接口 一.抽象类与接口 1.抽象类简介 面向对象的抽象类用于表示现实世界的抽象概念,是一种只能定义类型,不能产生对象的类(不能实例化),只能被继承并被重写相关函数,直接特征是相关函数没有完整实现.C++语言没有抽象类的概念,通过纯虚函数实现抽象类.纯虚函数是指定义原型的成员函数,C++中类如果存在纯虚函数就成为了抽象类.抽象类只能用作父类被继承,子类必须实现父类纯虚函数的具体功能,如果子类没实现纯虚函数,子类也为抽象类.抽象类不可以定义对象,但是可以定义指

Go语言学习笔记(一) [Go语言的HelloWorld]

日期:2014年7月18日 1.简介 Go 编程语言是一个使得程序员更加有效率的开源项目.Go 是有表达力.简 洁.清晰和有效率的.它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有性的模块化程序.Go 编译到机器码非常快 速,同时具有便利的垃圾回收和强大的运行时反射.它是快速的.静态类型编译语言,但是感觉上是动态类型的,解释型语言. Go 是第一个实现了简单的(或更加简单的)并行开发,且跨平台的类 C 语言. 2.Go语言文档查看 安装好Go语言之后,其文档可以通过go do

GO语言学习(十五)Go 语言指针

Go 语言指针 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务. 接下来让我们来一步步学习 Go 语言指针. 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址. Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址. 以下实例演示了变量在内存中地址: package main import "fmt" func main() { var a int = 10 fmt.Printf("变量的地址: %x\n

go语言学习之旅--Go 语言环境安装

前言 笔者已经自学python大概已经几个月了,但是工作繁忙,而且工作中未用到python的知识.于是就渐渐生疏了,这是下定决心学习go,是因为公司有一台go编写的报表系统,而且公司逐渐在想docker转,学习go更又助于未来的工作. 关于GO Go 是一个开源的编程语言,它能让构造简单.可靠且高效的软件变得容易. Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,

区块链技术语言(二十六)——Go语言异常处理

任何编程语言的学习都要考虑错误处理.早期的语言,比如C语言中的errno,不是语言规范的一部分,通常只作为一种编程范式存在.但C++语言从语言层面上增加错误处理的支持,比如异常的概念和try-catch关键字的引入.而Go语言最大的亮点之一就是拥有漂亮的错误处理规范. 一.error error是Go语言内建的接口类型,它是错误处理的标准模式,定义如下: 在Go语言中,生成err值的方法有三种方式:通过errors包的New函数获得error类型的值,采用fmt.Errof 将string信息转