题目
设有一个递归算法如下: int fact(int n) ( /n大于等于0 if(nA. n+1B. n-1C. nD. n+2
设有一个递归算法如下: int fact(int n) { //n大于等于0 if(n<=0) return 1; else return n*fact(n-1); } 则计算fact(n)需要调用该函数的次数为()
A. n+1
B. n-1
C. n
D. n+2
题目解答
答案
A. n+1
解析
步骤 1:理解递归函数
递归函数 `fact(int n)` 用于计算阶乘。当 `n` 小于等于 0 时,返回 1;否则,返回 `n * fact(n-1)`。这意味着每次递归调用时,`n` 的值会减 1,直到 `n` 小于等于 0。
步骤 2:计算调用次数
每次递归调用 `fact(n)` 时,都会调用 `fact(n-1)`,直到 `n` 减到 0。因此,从 `n` 到 0,每次递归调用都会减少 1,总共需要调用 `n` 次递归函数。但是,当 `n` 减到 0 时,还会调用一次 `fact(0)`,因此总共需要调用 `n + 1` 次。
递归函数 `fact(int n)` 用于计算阶乘。当 `n` 小于等于 0 时,返回 1;否则,返回 `n * fact(n-1)`。这意味着每次递归调用时,`n` 的值会减 1,直到 `n` 小于等于 0。
步骤 2:计算调用次数
每次递归调用 `fact(n)` 时,都会调用 `fact(n-1)`,直到 `n` 减到 0。因此,从 `n` 到 0,每次递归调用都会减少 1,总共需要调用 `n` 次递归函数。但是,当 `n` 减到 0 时,还会调用一次 `fact(0)`,因此总共需要调用 `n + 1` 次。