private static int Bind(int money)
{
// int TotalPing = 0;
//13+6+3+2+1
if (money == 1)
{
return 1;
}
else
{
return Bind(money / 2) + money;
}
}递归
{
// int TotalPing = 0;
//13+6+3+2+1
if (money == 1)
{
return 1;
}
else
{
return Bind(money / 2) + money;
}
}递归
而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源!
前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。
而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源!
前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。返回的时候会加原先的值
层层递归然后返回,递归的值是money/2,返回的值是bind(money/2)+money
除非你这样写:
private static int Bind(int money)
{
if (money == 1)
return 1;
else
return Bind(money / 2 + money);
}
那计算结果是不同的
而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源!
前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。返回的时候会加原先的值
层层递归然后返回,递归的值是money/2,返回的值是bind(money/2)+money
非常谢谢你,最后我传值是13,结果是23怎么得来的呢,每次返回的值还有作用吗,还是只要最后1次返回的?小弟很笨的,谢谢大神指导!
调用的顺序是从Bind -> BindN
执行完的顺序则刚好相反
msgbox Sum(13)
Function Sum(num)
Dim str:str=num
If num = 1 Then
Sum = 1
Else
Do While Not int(num/2)=1 ‘无限循环
num = int(num/2)
str = str + num
Loop
Sum= str +1
End If
End Function
学习学习
1.求数组中的最大数
2.1+2+3+...+n
3.求n个整数的积
4.求n个整数的平均值
5.求n个自然数的最大公约数与最小公倍数
6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子
7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项.会用就行,然后你就觉得递归不就是递归嘛,呵呵
bind(money/2)里面的形参值不停的降低,可以到1或者0,这样可以得出一个退出条件