iT邦幫忙

1

Golang - 不用for迴圈,利用遞迴反轉字串

as title

這是之前去面試的考題
想了很久,不過感覺不是最佳解
做個紀錄
期待有大神看到可以提供更好的解法XD

func main() {
	s := "ABCDEFG"
	t := len(s) - 1
	tar1 := stringReverseRecursion1(s, t)

	log.Println(tar1)
}

func stringReverseRecursion1(temp string, times int) string {
	if times < 0 {
		return temp[len(temp)/2:]
	}

	temp += string(temp[times])
	times--

	return stringReverseRecursion1(temp, times)
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

3
一級屠豬士
iT邦大師 1 級 ‧ 2021-07-17 22:30:32
package main

import (
  "fmt"
)

func reverseStrRecursion(input string) string {
  runes := []rune(input)
  if len(runes) <= 1 {
    return string(runes)
  }
  return reverseStrRecursion(string(runes[1:])) + string(runes[0])
}


func main() {
  s0 := ""
  fmt.Println(reverseStrRecursion(s0))
  
  s1a := "ㄅ"
  fmt.Println(reverseStrRecursion(s1a))
  
  s1b := "b"
  fmt.Println(reverseStrRecursion(s1b))
  
  s1c := "?"
  fmt.Println(reverseStrRecursion(s1c))
  
  s2a := "Hello"
  fmt.Println(reverseStrRecursion(s2a))
    
  s2b := "?????????????"
  fmt.Println(reverseStrRecursion(s2b))
  
  s3 := "The quick brown 狐 jumped over the lazy 犬"
  fmt.Println(reverseStrRecursion(s3))
  
  s4 := "明里つむぎ 佳苗るか 岬ななみ"
  fmt.Println(reverseStrRecursion(s4))
}

https://ithelp.ithome.com.tw/upload/images/20210717/20050647Qa0r48Fz5g.png

看更多先前的回應...收起先前的回應...

貼的時候 水果都能看見....存了以後水果就變亂碼了.

whitefloor iT邦研究生 2 級 ‧ 2021-07-18 01:00:55 檢舉

最後那個return的地方真是厲害
我看了30分鐘才懂
我沒理解錯的話是return在等reverseStrRecursion處理完
然後reverseStrRecursion一直將字首拋出去連接

沒想到可以這樣用...

whitefloor iT邦研究生 2 級 ‧ 2021-07-18 01:01:48 檢舉

大神請受我一拜

其實這是標準的,遞迴的寫法. 另外注意到,我將他rune化了.
golang 的 rune , 在幾年前
https://ithelp.ithome.com.tw/articles/10161710

這篇也是我寫的.參考一下.

whitefloor iT邦研究生 2 級 ‧ 2021-07-18 10:53:02 檢舉

/images/emoticon/emoticon07.gif

我也要對擺
/images/emoticon/emoticon32.gif

我要留言

立即登入留言