对递归理解的不透彻,它里面是怎么在运转,请求讲解!

火拼阿三 2013-06-25 10:58:21
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;
}
}
...全文
574 37 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaonanvip5 2013-08-11
  • 打赏
  • 举报
回复
最关键是知道底层的运行机制啊
jack15850798154 2013-06-26
  • 打赏
  • 举报
回复
递归就是自己调用自己
jack15850798154 2013-06-26
  • 打赏
  • 举报
回复
递归在我看来就是 一个入口,一个出口(防止死循环)!
liuduo251 2013-06-26
  • 打赏
  • 举报
回复
你bind(money)里面还是调用bind(money),这样不会实现最后退出。 bind(money/2)里面的形参值不停的降低,可以到1或者0,这样可以得出一个退出条件
Regan-lin 2013-06-25
  • 打赏
  • 举报
回复
就是一层一层的递归往下刨,你第一次传的是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;递归跳出!
火拼阿三 2013-06-25
  • 打赏
  • 举报
回复
谢谢大家,我结贴了,我懂了,分分给了楼上两个,很谢谢你xianfajushi,楼上的传递的参数是6,也就是说拿最后一次返回结果为1的值,+money,一层返回一层上去,如dongxinxi所说的,也很谢谢你,我懂得了这个道理,谢谢大家啊~!
Alvin-x 2013-06-25
  • 打赏
  • 举报
回复
(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
Null_Reference 2013-06-25
  • 打赏
  • 举报
回复
自己掉自己,不满足条件就结束。
火拼阿三 2013-06-25
  • 打赏
  • 举报
回复
引用 21 楼 dongxinxi 的回复:
你要实在不好理解,可以把依次调用的Bind想像是Bind1,Bind2...BindN,它们的实现都与Bind完全一样 调用的顺序是从Bind -> BindN 执行完的顺序则刚好相反
你说的很好,很谢谢你,能告诉我如果传值是13,它是怎么累加到23的呢?
火拼阿三 2013-06-25
  • 打赏
  • 举报
回复
引用 20 楼 dongxinxi 的回复:
调用自身,直到money==1时,最内层N的调用返回1(弹至上一层),累加,然后又弹至上一层的上一层,累加...直到弹出最上层(第一次调用Bind),累加,然后return,整个结束
你说的我大概理解了,但是他的值是怎么加起来的,比如我现在参数是13,结果会是多少,怎么来的.
火拼阿三 2013-06-25
  • 打赏
  • 举报
回复
引用 19 楼 xianfajushi 的回复:
按照你写的累计:1+3+6=10,最后值 = 1, +返回值3 +返回值6,你可自己测试和跟踪,看是否如你所想。
结果是23,我传递的参数是13,不是10啊。。。
  • 打赏
  • 举报
回复
你要实在不好理解,可以把依次调用的Bind想像是Bind1,Bind2...BindN,它们的实现都与Bind完全一样 调用的顺序是从Bind -> BindN 执行完的顺序则刚好相反
  • 打赏
  • 举报
回复
调用自身,直到money==1时,最内层N的调用返回1(弹至上一层),累加,然后又弹至上一层的上一层,累加...直到弹出最上层(第一次调用Bind),累加,然后return,整个结束
  • 打赏
  • 举报
回复
按照你写的累计:1+3+6=10,最后值 = 1, +返回值3 +返回值6,你可自己测试和跟踪,看是否如你所想。
  • 打赏
  • 举报
回复
引用 7 楼 fate1987 的回复:
[quote=引用 3 楼 vb763305825 的回复:] 当money不等于1时调用自身
我知道调用自身,他什么时候加的后面的MONEY,他的值又是怎么累加的?[/quote] money等于1的时候,一层层地返回值return Bind(money / 2) + money
火拼阿三 2013-06-25
  • 打赏
  • 举报
回复
引用 15 楼 xianfajushi 的回复:
什么时候累加很好办跟踪就可以看到了,如输入6那么,6/2=3,3/2=1跳出,开始累加。 除非你这样写: private static int Bind(int money) { if (money == 1) return 1; else return Bind(money / 2 + money); } 那计算结果是不同的
先跳出后累加?他怎么怎么累加的,按照我写的,小弟愚笨,请谅解,谢谢大神!
火拼阿三 2013-06-25
  • 打赏
  • 举报
回复
引用 14 楼 no200830740203 的回复:
[quote=引用 13 楼 fate1987 的回复:] [quote=引用 12 楼 lifeilin6671 的回复:] [quote=引用 1 楼 fate1987 的回复:] 我自己无意中写出来,得到了一道题的结果,但是我不知道它里面到底是怎么样算的,没加后面的MONEY我知道,如果在加Bind(money / 2) + Bind(money)这样会报错,请大神指导一下!
你这样调用递归会出现几何增长,肯定会报错。 而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源![/quote] 前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。[/quote] 返回的时候会加原先的值 层层递归然后返回,递归的值是money/2,返回的值是bind(money/2)+money[/quote] 非常谢谢你,最后我传值是13,结果是23怎么得来的呢,每次返回的值还有作用吗,还是只要最后1次返回的?小弟很笨的,谢谢大神指导!
  • 打赏
  • 举报
回复
什么时候累加很好办跟踪就可以看到了,如输入6那么,6/2=3,3/2=1跳出,开始累加。 除非你这样写: private static int Bind(int money) { if (money == 1) return 1; else return Bind(money / 2 + money); } 那计算结果是不同的
  • 打赏
  • 举报
回复
引用 13 楼 fate1987 的回复:
[quote=引用 12 楼 lifeilin6671 的回复:] [quote=引用 1 楼 fate1987 的回复:] 我自己无意中写出来,得到了一道题的结果,但是我不知道它里面到底是怎么样算的,没加后面的MONEY我知道,如果在加Bind(money / 2) + Bind(money)这样会报错,请大神指导一下!
你这样调用递归会出现几何增长,肯定会报错。 而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源![/quote] 前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。[/quote] 返回的时候会加原先的值 层层递归然后返回,递归的值是money/2,返回的值是bind(money/2)+money
火拼阿三 2013-06-25
  • 打赏
  • 举报
回复
引用 12 楼 lifeilin6671 的回复:
[quote=引用 1 楼 fate1987 的回复:] 我自己无意中写出来,得到了一道题的结果,但是我不知道它里面到底是怎么样算的,没加后面的MONEY我知道,如果在加Bind(money / 2) + Bind(money)这样会报错,请大神指导一下!
你这样调用递归会出现几何增长,肯定会报错。 而只一次调用自己必须有一个条件能够跳出,否则也会耗尽系统资源![/quote] 前面Money不是处以了2了吗,值怎么会越来越大呢,第2次应该是除以2的值在调用Bind(Money),应该会越来越小吧,而且我这样写Bind(money/2)+money,每次递归的值是money/2还是(money/2)+money,如果不是,他什么时候会加money这个值呢,谢谢大神们指导下小弟。
加载更多回复(15)

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧