设有一个递归算法如下
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
很明显的递归调用求阶乘:
计算fact(n)【调用1次】--->返回n*fact(n-1)【调用1+1次】--->返回n*(n-1)*fact(n-2)【调用1+2次)
依次类推……
到返回n*(n-1)*(n-2)*...*fact(n-(n-1))时【调用1+n-1次】
下一步就是返回n*(n-1)*(n-2)*...*1*fact(n-n)【直到fact(0)结束递归,共调用1+n次】
至于求阶乘为什么不是调用n次(因为阶乘是从一个数往下乘一直乘到1嘛,例如3!=3*2*1。)那是因为if语句中的判断条件是n<=0,如果改成n<=1那么就是n次。(但是不知道改了之后会不会有bug,没多想,我只是觉得0!=1!=1,所以才觉得改了问题好像也不大。)
答案:A
解释:特殊值法。设...
用户登录可进行刷题及查看答案
解释:特殊值法。设n=0,易知仅调用一次fact(n)函数,故选A。
或者用3
登录后提交答案