首先,我必须说我可以在像Fibonacci这样的简单示例上使用递归函数,但我无法理解如何干这样的递归(用笔和纸解决)这个递归:
#include<iostream>
using namespace std;
int max(int a, int b)
{
if(a>b)return a;
return b;
}
int f(int a, int b)
{
if(a==0)return b;
return max( f(a-1,2*b), f(a-1,2*b+1) );
}
int main()
{
cout<<f(8,0);
}
如何使用笔和纸进行此操作,例如a = 5
和b = 6
?
答案 0 :(得分:3)
a
(8)2b
调整一次2b+1
2b + 1 > 2b
只有最大通话的正确网站才有意义(2b + 1
)现在让我们以数学方式进行第一次迭代:
2 * b + 1 = 2^1 * b + 2^0
2 * (2^1 * b + 2^0) + 1 = 2^2 * b + 2^1 + 2^0
2 * (2^2 * b + 2^1 + 2^0) + 1 = 2^3 * b + 2^2 + 2^1 + 2^0
2 * (2^3 * b + 2^2 + 2^1 + 2^0) + 1 = 2^4 * b + 2^3 + 2^2 + 2^1 + 2^0
正如您所看到的,背后有一个系统。因为第一次迭代b = 0
,我们可以忽略左侧。因此最终的价值是:
2^0 + 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7
=
1 + 2 + 4 + 8 + 16 + 32 + 64 + 128
=
255
如果我们运行程序,我们得到完全相同的值
答案 1 :(得分:1)
只是提供一些信息,有些算法使用更复杂的参数,一个基本的例子是mergesort
合并很简单:
答案 2 :(得分:0)
假设您想在纸上分析功能,我会将结果粘贴到f(1,2)
f(2, 1) =
max( f(1, 2), f(1, 3) ) =
max ( max(f(0, 4), f(0, 5) , max(f(0, 6), f(0, 7) ) =
max ( max(4, 5) , max(6, 7) ) =
max (5, 7) =
7
由您决定是否遵循计算
注意:我还假设你没有错过这里的括号:2*b+1