递归帮助请

时间:2014-06-12 20:09:10

标签: c++ recursion

我正在尝试为即将到来的测试找出以下问题。我到处搜索,我理解递归的基础知识。我对这个特定问题的理解分别是int nint 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)返回的值是什么?

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