递归,而不是通过return语句结束递归

用户2671513:

我正在此树中执行二进制搜索,并期望结果为true时,查找递归会结束。它确实具有true的结果,但是即使它获得了true值并运行return语句,它似乎也继续运行并最终达到了false

找到值并返回时,如何使该程序结束?

http://play.golang.org/p/miWqRVo_XO

package main

import "fmt"

type Tree struct {
  Left  *Tree
  Value int64
  Right *Tree
}

func NewT(val int64) *Tree {
  return &Tree{
    Left:  new(Tree),
    Value: val,
    Right: new(Tree),
  }
}

func (T *Tree) Insert(val int64) *Tree {
  if T == nil {
    return &Tree{nil, val, nil}
  }
  if val < T.Value {
    T.Left = T.Left.Insert(val)
  } else {
    T.Right = T.Right.Insert(val)
  }
  return T
}

func (T *Tree) Find(val int64) bool {
  fmt.Printf("%v , %v\n", T.Value, val)
  fmt.Printf("%v\n", T.Value == val)

  if fmt.Sprintf("%v", T.Value) == fmt.Sprintf("%v", val) {
    fmt.Println("True and we do return true")
    return true
  }
  if val < T.Value {
    T.Left.Find(val)
  } else {
    T.Right.Find(val)
  }
  fmt.Println("False")
  return false
}

func main() {
  t1 := NewT(5)
  for i := 0; i < 10; i++ {
    t1 = t1.Insert(int64(i))
  }
  fmt.Println("Result:", t1.Find(7))
}

输出为

5 , 7
false
0 , 7
false
5 , 7
false
6 , 7
false
7 , 7
true
True and we do return true
詹姆斯·亨斯特里奇(James Henstridge):

Tree.Find当您递归到它时,您似乎忽略了它的返回值如果传递返回值,则应该获得所需的行为。也就是说,将的结尾修改为Find

if val < T.Value {
    return T.Left.Find(val)
} else {
    return T.Right.Find(val)
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章