今天练习C++时,看到一道有意思的递归练习。以此题为例,我们一起详细分析以下递归过程吧!
#include <iostream>
using namespace std;
int func(int x, int y)
{
if (x==1 &&y==1)
return 1;
if(x<0)
return y;
if(y<0)
return x;
return func(x, y-2)+func(x-2,y);
}
int main()
{
cout<<func(3,3);
return 0;
}
分析:
该程序定义了一个递归函数func,然后在主函数中使用(3,3)调用。
func函数说明:
case1:如果x和y都为1,则返回1;
case2:如果 x < 0, 则返回y;
case3:如果 y < 0, 则返回x;
递归:否则返回 func(x, y-2) + func(x-2, y).
图示分析:
分解执行过程:
调用:func(3, 3)
递归:func(3, 1) 和 finc(1, 3)
调用:func(3, 1)
递归:func(3, -1) 和 finc(1, 1)
调用:func(3, -1), y < 0, 返回 x = 3.
调用:func(1, 1),x和y都是1,返回 1.
返回到调用:func(3, 1)
结果:func(3, 1) = 3 + 1 =4
调用:func(1, 3)
递归:func(1, 1) 和 func(-1, 3)
调用: func(1, 1), x和y都是1,返回 1.
调用:func(-1, 3),x < 0, 返回 y = 3.
返回调用:func(1, 3)
结果:func(1, 3) = 1 + 3 = 4
返回初始调用:func(3, 3)
结果:func(3, 3) = 4 + 4 = 8
最终结果,func(3, 3)的结果为8。