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;
            }
        }递归

解决方案 »

  1.   

    我自己无意中写出来,得到了一道题的结果,但是我不知道它里面到底是怎么样算的,没加后面的MONEY我知道,如果在加Bind(money / 2) + Bind(money)这样会报错,请大神指导一下!
      

  2.   

    我知道调用自身,他什么时候加的后面的MONEY,他的值又是怎么累加的?
      

  3.   

    我知道递归怎么用,但是不知道Bind(Money/2)+Money和Bind(Money/2)+Bind(Money)的区别,后面的为什么会报错!
      

  4.   

    你这样调用递归会出现几何增长,肯定会报错。
    而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源!
    前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。
      

  5.   

    你这样调用递归会出现几何增长,肯定会报错。
    而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源!
    前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。返回的时候会加原先的值
    层层递归然后返回,递归的值是money/2,返回的值是bind(money/2)+money
      

  6.   

    什么时候累加很好办跟踪就可以看到了,如输入6那么,6/2=3,3/2=1跳出,开始累加。
    除非你这样写:
    private static int Bind(int money)
             {
                 if (money == 1)
                    return 1;
                 else
                  return Bind(money / 2 + money);
             } 
    那计算结果是不同的
      

  7.   

    你这样调用递归会出现几何增长,肯定会报错。
    而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源!
    前面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次返回的?小弟很笨的,谢谢大神指导!
      

  8.   

    我知道调用自身,他什么时候加的后面的MONEY,他的值又是怎么累加的? money等于1的时候,一层层地返回值return Bind(money / 2) + money
      

  9.   

    调用自身,直到money==1时,最内层N的调用返回1(弹至上一层),累加,然后又弹至上一层的上一层,累加...直到弹出最上层(第一次调用Bind),累加,然后return,整个结束
      

  10.   

    你要实在不好理解,可以把依次调用的Bind想像是Bind1,Bind2...BindN,它们的实现都与Bind完全一样
    调用的顺序是从Bind -> BindN
    执行完的顺序则刚好相反
      

  11.   

    (vbs)
    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
      

  12.   

    谢谢大家,我结贴了,我懂了,分分给了楼上两个,很谢谢你xianfajushi,楼上的传递的参数是6,也就是说拿最后一次返回结果为1的值,+money,一层返回一层上去,如dongxinxi所说的,也很谢谢你,我懂得了这个道理,谢谢大家啊~!
      

  13.   

    就是一层一层的递归往下刨,你第一次传的是13那你下面的else就是bind(13/2)+13 那你这个bind(13/2)里面又是不满足等于1那又等于bind(6/2)+6那你的bind(6/2)又不满足等于那又是bind(3/2)+3,那你这个bind(3/2)满足等于1的判断那就是返回1 这样加起来13+6+3+1=23;递归跳出!
      

  14.   

    就是无限调用自己,进循环,只在满足一定条件时跳出,比如当程序运行N次,或者money调用自己出错时跳出
    学习学习
      

  15.   

    用递归的方法完成下列问题
    1.求数组中的最大数
    2.1+2+3+...+n
    3.求n个整数的积
    4.求n个整数的平均值
    5.求n个自然数的最大公约数与最小公倍数
    6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.问n个月后共有多少对兔子
    7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n项.会用就行,然后你就觉得递归不就是递归嘛,呵呵
      

  16.   

    你bind(money)里面还是调用bind(money),这样不会实现最后退出。
    bind(money/2)里面的形参值不停的降低,可以到1或者0,这样可以得出一个退出条件