呼叫f(4,2)返回什么值?

时间:2017-03-19 01:21:07

标签: recursion

    //pseudocode
//n and k are nonnegative integers`
int f(int n, int k)`
    `if(k*n ==0)`
        `return 1`
    `else`
        `return f(n-1,k-1)+f(n-1,k)`
`end if`
end f

到目前为止,我有这个。但是如何找到此函数调用的值?

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,1)+f(1,2)
         f(0,0)+f(0,1)            f(0,1)+f(0,2)

2 个答案:

答案 0 :(得分:0)

基本上答案就是继续你的开始:

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 + f(0, 0) + f(0, 1) + 1 +  f(0, 0) + f(0, 1)+  f(0, 0) + 
  f(0, 1) + f(0, 1) + f(0, 2)                                 ; ==
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1                     ; ==
11

答案 1 :(得分:0)

答案是11。

理解递归函数调用的一种简单方法是扩展递归调用堆栈树,它可以帮助您清楚see整个过程如何进行(希望图片足够清晰):

divide and conquer process

在评论中我在递归过程中提到divede-and-conquer进程,所以我更新了一个新图像以包含整个过程。希望这可能会有所帮助: - )