我正在尝试为即将到来的测试找出以下问题。我到处搜索,我理解递归的基础知识。我对这个特定问题的理解分别是int n
和int k
的价值。我有这个问题的答案,因为这是一个练习题,但我不知道答案是如何找到的。
// Precondition: n and k are non-negative integers
int f(int n, int k) {
if (k * n == 0)
return 1
else
return f(n - 1, k - 1) + f(n - 1, k)
}
通话f(4, 2)
返回的值是什么?
答案 0 :(得分:4)
看看它是如何被召唤的。
f(4,2)进入第二个区块,调用f(3,1)+ f(3,2)
f(3,1)调用f(2,0)+ f(2,1)= 1 + f(1,0)+ f(1,1)= 1 + 1 + f(0,0) + F(0,1)= 1 + 1 + 1 + 1 = 4
f(3,2)调用f(2,1)+ f(2,2)= f(1,0)+ f(1,1)+ f(1,1)+ f(1,2) )等等。
你应该可以从这里开始工作。
答案 1 :(得分:3)
我不确定自
以来出了什么问题f(4,2)=f(3,1) + f(3,2)
=(f(2,0)+f(2,1) )+ (f(2,1) +f(2,2))
=(1 +(f(1,0)+f(1,1))+((f(1,0)+f(1,1))+(f(1,1)+f(1,2))
=(1 + 1 +(1+1)) +( 1 +(1+1) + (1+1) +1 + 1 ))
=11