10月23腾讯笔试递归题

题如下:

计算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 :

太晚了,读者自己去分析这些输出数据吧。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值