分析伪代码

时间:2013-05-06 15:55:23

标签: for-loop queue pseudocode

Algorithm 1. QUEUESTUFF(n)
Input: Integer n
1) Let Q = an empty Queue
2) For i = 1 to n
3) Q.Enqueue(i)
4) End For
5) For i = 1 to n-1
6) Let X = Q.Dequeue()
7) End For
8) Let X = Q.Dequeue()
Output: The contents of X

Q.Enqueue(X) add item X to the queue
X = Q.Dequeue() extracts an item from the queue and assigns it to X. 
If the queue is empty then -999 is returned.

如果n> 0我知道这个算法会输出n-1,例如,如果n = 6,X将输出,等于5。

然而,如果n< 0?循环可以从1到负数吗?如果不是......我相信For循环都不会运行,给我们输出-999(因为队列是空的)。

如果循环可以变成负数,那么让我们说n = -2。队列将是{1,0,-1,-2}。然后我们必须将1到3次出列...使X(应用出列的最终项目)-2。那么现在这个算法又回来了什么?几乎n = X正确吗?

1 个答案:

答案 0 :(得分:0)

对于n> 0,队列将按以下顺序填充(第1行到第4行):

1, 2, 3, ..., n

在第5行到第7行中,你逐个提取(FIFO:先进先出):

1, 2, 3, ..., n-1

最后在第8行中提取最后一个元素:

X = n

与声明的算法类似,我非常确定For语句仅针对n >= 1执行,但是对于n < 1(和For语句运行的情况从1, 0, -1,..., n开始,队列中填充了1-n+1 = 2+abs(n)个值,并且在第5行到第7行中提取了1-(n-1)+1 = 3+abs(n)个值,因此队列在这里已经为空。在第8行,从现在空队列中读取将返回

X = -999

但正如我所说,我认为For i = 1 to n根本没有执行n<1,所以第8行也会给出(因为空队列):

X = -999