题如下:
计算f(m, n)
f(m, n) = m + n + 1, 如果m*n = 0
否则f(m, n) = f(m - 1, f(m, n - 1))
程序如下,在(1)~(4)处补充语句:
当时想破脑袋了,就是没想好怎么办,知道栈是用来模拟递归的,也知道栈中存放的肯定是m值,但就没想好怎么去保存和恢复,回来编个程序,弄弄倒是出来了,如下
题目也有误导性,那些缩进啊,我还以为是要填if语句什么的,原来就是迷惑人的。
考虑f(2, 2),每次循环后m, n, top及栈中的值变化如下:
(m, n) = (2, 1), top = 1 : 1
(m, n) = (2, 0), top = 2 : 1 1
(m, n) = (1, 3), top = 1 : 1
(m, n) = (1, 2), top = 2 : 0 1
(m, n) = (1, 1), top = 3 : 0 0 1
(m, n) = (1, 0), top = 4 : 0 0 0 1
(m, n) = (0, 2), top = 3 : 0 0 1
(m, n) = (0, 3), top = 2 : 0 1
(m, n) = (0, 4), top = 1 : 1
(m, n) = (1, 5), top = 0 :
(m, n) = (1, 4), top = 1 : 0
(m, n) = (1, 3), top = 2 : 0 0
(m, n) = (1, 2), top = 3 : 0 0 0
(m, n) = (1, 1), top = 4 : 0 0 0 0
(m, n) = (1, 0), top = 5 : 0 0 0 0 0
(m, n) = (0, 2), top = 4 : 0 0 0 0
(m, n) = (0, 3), top = 3 : 0 0 0
(m, n) = (0, 4), top = 2 : 0 0
(m, n) = (0, 5), top = 1 : 0
(m, n) = (0, 6), top = 0 :
(m, n) = (0, 7), top = -1 :