猿问

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

我正在这棵树中进行二分搜索,并期望 Find 递归在结果为真时结束。它确实有一个结果为真但即使它得到真值并运行返回语句,似乎继续运行并最终达到了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


白衣非少年
浏览 264回答 1
1回答

繁花不似锦

您似乎忽略了Tree.Find递归时的返回值。如果您传递返回值,您应该获得所需的行为。即修改结尾为Find:if val < T.Value {&nbsp; &nbsp; return T.Left.Find(val)} else {&nbsp; &nbsp; return T.Right.Find(val)}
随时随地看视频慕课网APP

相关分类

Go
我要回答