主頁(yè) > 知識(shí)庫(kù) > 深入解析Go語(yǔ)言編程中的遞歸使用

深入解析Go語(yǔ)言編程中的遞歸使用

熱門標(biāo)簽:電銷機(jī)器人可以補(bǔ)救房產(chǎn)中介嗎 騰訊外呼系統(tǒng)價(jià)格 百度地圖標(biāo)注搜索關(guān)鍵詞 電梯外呼訪客系統(tǒng) 最短的地圖標(biāo)注 谷歌便利店地圖標(biāo)注 ?兓? 成都呼叫中心外呼系統(tǒng)平臺(tái) 浙江人工智能外呼管理系統(tǒng)

遞歸是以相似的方式重復(fù)項(xiàng)目的過程。同樣適用于編程語(yǔ)言中,如果一個(gè)程序可以讓你調(diào)用同一個(gè)函數(shù)被調(diào)用的函數(shù),遞歸調(diào)用函數(shù)內(nèi)使用如下。

復(fù)制代碼 代碼如下:

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

func main() {
   recursion()
}


Go編程語(yǔ)言支持遞歸,即要調(diào)用的函數(shù)本身。但是在使用遞歸時(shí),程序員需要謹(jǐn)慎確定函數(shù)的退出條件,否則會(huì)造成無(wú)限循環(huán)。

遞歸函數(shù)是解決許多數(shù)學(xué)問題想計(jì)算一個(gè)數(shù)階乘非常有用的,產(chǎn)生斐波系列等

數(shù)字階乘
以下是一個(gè)例子,它計(jì)算階乘用于使用一個(gè)遞歸函數(shù)由給定數(shù):

復(fù)制代碼 代碼如下:

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))
}


讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:
復(fù)制代碼 代碼如下:

Factorial of 15 is 2004310016

斐波那契系列
以下是另一個(gè)例子,其產(chǎn)生斐波串聯(lián)使用一個(gè)遞歸函數(shù)由給定一個(gè)數(shù):
復(fù)制代碼 代碼如下:

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))
    }   
}


讓我們編譯和運(yùn)行上面的程序,這將產(chǎn)生以下結(jié)果:

0 1 1 2 3 5 8 13 21 34

golang 遞歸判斷回文字符串
判斷回文字符串是個(gè)比較經(jīng)典的問題。

思路就是拿第一個(gè)字符和最一個(gè)字符比較,如果不等退出,相同的話繼續(xù)剛剛的過程,直到第一個(gè)字符和最后一個(gè)字符相遇或者他們的距離為1時(shí)。說明他們是回文字符串。

下面的代碼會(huì)忽略空白字符 如"1   1  2 1"會(huì)讓為是回文字符串。

復(fù)制代碼 代碼如下:

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和python遞歸刪除.ds store文件的方法
  • Go遞歸修改文件名的實(shí)例代碼

標(biāo)簽:邢臺(tái) 宜昌 盤錦 上海 雅安 眉山 七臺(tái)河 紹興

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《深入解析Go語(yǔ)言編程中的遞歸使用》,本文關(guān)鍵詞  深入,解析,語(yǔ)言編程,中的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《深入解析Go語(yǔ)言編程中的遞歸使用》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于深入解析Go語(yǔ)言編程中的遞歸使用的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章