深入解析Go语言编程中的递归使用_Golang

递归是以相似的方式重复项目的过程。同样适用于编程语言中,如果一个程序可以让你调用同一个函数被调用的函数,递归调用函数内使用如下。

复制代码 代码如下:

func recursion() {
   recursion() /* function calls itself */
}

func main() {
   recursion()
}

Go编程语言支持递归,即要调用的函数本身。但是在使用递归时,程序员需要谨慎确定函数的退出条件,否则会造成无限循环。

递归函数是解决许多数学问题想计算一个数阶乘非常有用的,产生斐波系列等

数字阶乘
以下是一个例子,它计算阶乘用于使用一个递归函数由给定数:

复制代码 代码如下:

package main

import "fmt"

func factorial(i int) {
   if(i <= 1) {
      return 1
   }
   return i * factorial(i - 1)
}

func main { 
    var i int = 15
    fmt.Printf("Factorial of %d is %d\n", i, factorial(i))
}

让我们编译和运行上面的程序,这将产生以下结果:

复制代码 代码如下:

Factorial of 15 is 2004310016

斐波那契系列
以下是另一个例子,其产生斐波串联使用一个递归函数由给定一个数:

复制代码 代码如下:

package main

import "fmt"

func fibonaci(i int) {
   if(i == 0) {
      return 0
   }
   if(i == 1) {
      return 1
   }
   return fibonaci(i-1) + fibonaci(i-2)
}

func main() {
    var i int
    for i = 0; i < 10; i++ {
       fmt.Printf("%d\t%n", fibonaci(i))
    }   
}

让我们编译和运行上面的程序,这将产生以下结果:

0 1 1 2 3 5 8 13 21 34

golang 递归判断回文字符串
判断回文字符串是个比较经典的问题。

思路就是拿第一个字符和最一个字符比较,如果不等退出,相同的话继续刚刚的过程,直到第一个字符和最后一个字符相遇或者他们的距离为1时。说明他们是回文字符串。

下面的代码会忽略空白字符 如"1   1  2 1"会让为是回文字符串。

复制代码 代码如下:

package main

import (
    "fmt"
    "os"
    "strings"
    "unicode/utf8"
)

func doPalindrome(s string) bool {
    if utf8.RuneCountInString(s) <= 1 {
        return true
    }  

    word := strings.Trim(s, "\t \r\n\v")
    first, sizeOfFirst := utf8.DecodeRuneInString(word)
    last, sizeOfLast := utf8.DecodeLastRuneInString(word)

    if first != last {
        return false
    }  
    return doPalindrome(word[sizeOfFirst : len(word)-sizeOfLast])
}

func IsPalindrome(word string) bool {
    s := ""
    s = strings.Trim(word, "\t \r\n\v")
    if len(s) == 0 || len(s) == 1 {
        return false
    }  
    return doPalindrome(s)
}

func main() {
    args := os.Args[1:]
    for _, v := range args {
        ok := IsPalindrome(v)
        if ok {
            fmt.Printf("%s\n", v)
        }  
    }  

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索递归
go
深入解析wpf编程、深入解析wpf编程 pdf、golang 递归、深入学习golang、golang 深入,以便于您获取更多的相关知识。

时间: 2016-11-02

深入解析Go语言编程中的递归使用_Golang的相关文章

深入解析Go语言编程中slice切片结构_Golang

数组转换成切片 复制代码 代码如下: a := [10]int{} fmt.Println(a)  s1 := a[:10]  //取前10个元素 [5:]取 5-最后的元素  fmt.Println(s1) slice测试 复制代码 代码如下: a := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'h'} sa := a[2:5] fmt.Println(string(sa)) sd1 := a[3:5] fmt.Println(string(sd1)) //看

深入解析Swift语言编程中的可选链_Swift

查询,调用属性,下标和方法上的一个可选可能 'nil' 的过程被定义为可选的链.可选链返回两个值 如果可选包含一个值,然后调用其相关属性,方法和下标返回值 如果可选包含一个"nil"值,所有的相关属性,方法和下标返回nil 由于多种查询方法,属性和下标故障组合在一起,以一种链将影响到整个链,并导致产生 'nil' 的值. 可选链作为一种替代强制解包裹可选链与可选值后指定"?"调用一个属性,方法或下标当可选的值返回一些值. 程序用于可选链 '!' 复制代码 代码如下:

源代码-关于C语言编程中R树索引的问题

问题描述 关于C语言编程中R树索引的问题 求教有没有大神知道R树索引如何建立.删除.插入等,急需一份源代码参考学习.谢谢啊,好人一生平安... 解决方案 http://www.cnblogs.com/javaspring/archive/2012/08/14/2656223.html

c语言-在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事?

问题描述 在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事? 在C语言编程中,我定义的全局变量足有2M大小,但生成的程序只有20k,怎么回事? 解决方案 全局变量是运行时操作系统分配的,分配在堆上,不是分配在静态区,所以不会影响exe的大小. 解决方案二: 你的全局变量没有初始化数据吧?如果你有2M大小的数据,就不一样了. 比如, char a[2*1024*1024] = {0,1,2,3,4..........}; char b[2*1024*1024]; 在链

c语言编程 多项式加法-c语言编程中求多项式加法

问题描述 c语言编程中求多项式加法 多项式加法(5分) 题目内容: 一个多项式可以表达为x的各次幂与系数乘积的和,比如: 2x6+3x5+12x3+6x+20 现在,你的程序要读入两个多项式,然后输出这两个多项式的和,也就是把对应的幂上的系数相加然后输出. 程序要处理的幂最大为100. 输入格式: 总共要输入两个多项式,每个多项式的输入格式如下: 每行输入两个数字,第一个表示幂次,第二个表示该幂次的系数,所有的系数都是整数.第一行一定是最高幂,最后一行一定是0次幂. 注意第一行和最后一行之间不一

C语言编程中,怎么定义数据格式?

问题描述 C语言编程中,怎么定义数据格式? 怎么在C语言中,定义10HZ数据格式如下: 第0-1字节代表帧头,2-5字节代表时戳,6-8字节代表姓,9-11字节代表名,12-13字节代表生日 ....... emphasized text PS:以前学过C语言,但是过了好几年,都忘了,现在工作要用到,但是却忘了怎么运用了.所以希望广大的网友能知道,麻烦告知. 谢谢啦.

《C语言解惑》—— 第一篇 C语言编程中的对与错

第一篇 C语言编程中的对与错 本篇主要采用分析编程中存在的典型错误.对比正确与错误程序的方法,使读者加深印象并提高分辨语法对错及编程的能力,进而达到尽快掌握C语言编程基础知识的目的.

C语言编程中实现二分查找的简单入门实例_C 语言

架设有一个数组 v 已经按升序排列了,数组 v 有 n=20 个元素.数组中有个元素 x,如何知道 x 位于该数组的第几位呢? 解决这个问题的一个普遍方法就是二分查找法.下面是程序: #include <stdio.h> int binsearch(int x, int v[], int n); main() { int i, result, n; int wait; int x = 17; // 需要查找的数值 int v[19]; // 定义一个数组 // 给数组赋值 for(i = 0;

浅谈Windows系统下C语言编程中Glib库的使用_C 语言

在这个C的变成世界里,有许多实用的库,其中最有名的且最通用(跨多个平台的实现包括Windows,要知道很多实用的编程库都不提供Windows的实现)就是GLib这个库,其中就有实现线程的部分. glib库是Linux平台下最常用的C语言函数库,它具有很好的可移植性和实用性. glib是Gtk +库和Gnome的基础.glib可以在多个平台下使用,比如Linux.Unix.Windows等.glib为许多标准的.常用的C语言结构提供了相应的替代物. 如果在程序中要使用到glib库中的函数,则应该包