首页 > 试题广场 >

给定下列递归算法的程序段,则输出结果为()。 int cnt

[单选题]
给定下列递归算法的程序段,则输出结果为()。
int cnt = 0, n;
void f(int a, int b)
{
	cnt ++ ;
	if(b <= 1)
		if(a == 1) return ;
		else f(a - 1, a - 2);
	else 
		f(a, b - 1);
	return ;
}
int main() {
	n = 456;
	f(n, n - 1);
	printf("%d",cnt);
}


  • 103740
  • 103741
  • 104196

  • 104197

经过n*(n-1)/2次循环达到f(1,0),需要再进行一次函数调用(容易遗漏导致错误),所以需要n*(n-1)/2+1次函数调用,n为456,所以结果为103741
编辑于 2021-12-21 09:46:58 回复(0)
这题答案错了吧,当b=1时,a!=1,就走了else f(a - 1, a - 2);    再进来就走 f(a, b - 1);  又递归调用下去了
发表于 2023-11-16 10:21:31 回复(0)