请您解释以下代码的功能
int main()
{
func1(10, 18);
return 0;
}
func1(int a, int b)
{
if (a > b)
return;
func1(a, b - 1);
printf("%d ", b);
}
以下代码给出 18 17 16 15 14 13 12 11 10
答案 0 :(得分:2)
我将在下面的程序中解释逻辑,因为您的程序在编译时会发出警告,因为您没有从旨在返回int
的函数返回int
。
int main()
{
func1(10, 18);
return 0;
}
void func1(int a, int b)
{
if(a > b)
return;
func1(a, b - 1);
printf("%d ", b);
}
首先从func1
调用main
,参数分别为10和18:
func1(10, 18);
if(a > b)
为false,因为a
(目前为10)不小于b
(目前为18)从func1
调用第二个func1
,参数分别为10和17:
func1(a, b - 1);
if(a > b)
为false,因为a
(目前为10)不小于b
(目前为17)从func1
调用第三个func1
,参数分别为10和16:
func1(a, b - 1);
if(a > b)
为false,因为a
(目前为10)不小于b
(目前为16)从func1
调用第四个func1
,参数分别为10和15:
func1(a, b - 1);
if(a > b)
为false,因为a
(当前为10)不小于b
(目前为15)第五个func1
从func1
调用,参数分别为10和14:
func1(a, b - 1);
if(a > b)
为false,因为a
(目前为10)不小于b
(目前为14)第六个func1
从func1
调用,参数分别为10和13:
func1(a, b - 1);
if(a > b)
为false,因为a
(目前为10)不小于b
(目前为13)从func1
调用第7 func1
个参数分别为10和12:
func1(a, b - 1);
if(a > b)
为false,因为a
(目前为10)不小于b
(目前为12)从func1
调用第8 func1
个参数分别为10和11:
func1(a, b - 1);
if(a > b)
为false,因为a
(当前为10)不小于b
(目前为11)从func1
调用第9个func1
,参数分别为10和10:
func1(a, b - 1);
if(a > b)
为false,因为a
(目前为10)不小于b
(目前为10)从func1
调用第10 func1
个参数分别为10和9:
func1(a, b - 1);
if(a > b)
为真,因为a
(当前为10)小于b
(目前为9)。因此,执行return
语句并完成第十func1
的执行。func1
从已停止的地点开始(func1(a, b - 1);
)并打印 10 (因为当前b
的值为10)并结束执行。func1
从停止的地点开始(func1(a, b - 1);
)并打印 11 (因为当前b
的值为11)并结束执行。func1
从停止的地点开始(func1(a, b - 1);
)并打印 12 (因为当前b
的值为12)并结束执行。func1
从已停止的地点(func1(a, b - 1);
)开始并打印 13 (因为当前b
的值为13)并结束执行。func1
从已停止的地点(func1(a, b - 1);
)开始并打印 14 (因为b
的值当前为14)并结束执行。 func1
从已停止的地点(func1(a, b - 1);
)开始并打印 15 (因为当前b
的值为15)并结束执行。func1
从已停止的地点(func1(a, b - 1);
)开始并打印 16 (因为b
的值目前为16)并结束执行。func1
从已停止的地点(func1(a, b - 1);
)开始并打印 17 (因为当前b
的值为17)并结束执行。func1
从已停止的地点(func1(a, b - 1);
)开始并打印 18 (因为b
的值目前为18)并结束执行。main
并执行return 0;
,终止程序。