这是我的递归程序的伪代码,它在数组的右侧或左侧移动一个圆圈。我正在尝试找出复杂性(我认为是n,数组A的大小,或者它可能是2 ^ n,因为它可以向左或向右返回?)。
我也试图弄清楚这是什么类型的递归,因为它在最后一个return语句中有一个OR,但我无处可以找到有关此信息的信息。
Boolean rightWing (int circle, Array A, List<int> checkerList)
Integer lastPlace equals A.length - 1
If circle equals lastPlace then // base case for recursion
Return true
If circle < 0 then
Return false
If circle > lastPlace then
Return false
// impossible case
If checkerList contains (circle) returns True then
Return false
checkerList.add(circle) // add the circle to the list for the checker if it's an impossible case
Integer moveRight equals circle + A[circle]
Integer moveLeft equals circle - A[circle]
Return rightWing ( moveRight, A, checkerList) or rightWing(moveLeft, A, checkerList)
答案 0 :(得分:0)
我不确定你的算法是否正确但是从你所说的我认为你会检查你的数组的每个元素一次所以O(n)与n = sizeof(A)是正确的。
您正在寻找的那种重复调用是尾递归或非尾递归。 What is tail recursion?