递归之我的个人理解:不知道楼主学编程的时间有多久,是否理解计算机执行程序时对子程序调用的原理。不过就我学c语言的理解来说,递归的原理是这样的:↓↓
①主程序main开始执行,到stry(n,0);
②调用子程序stry(int n,int r),执行处理stry(n,0)方法;
③因为n!=1,所以stry(n,0)方法还没执行完成,计算机就又开始调用子程序stry(int n,int r),执行处理stry(n/2,0);
④重复②,③,直到调用stry(int n,int r)时,n==1;
⑤因为n==1,stry(n,0)直接执行语句cout<<"2("<<r<<")",stry(1,0)结束;
⑥stry(1,0)结束,stry(2,0)可以执行stry(n/2,r+1)下一行的语句,stry(2,0)结束。
⑦重复执行⑥,直到stry(n,0)方法中stry(n/2,0)结束,stry(n,0)方法执行下一行语句,stry(n,0)方法结束,返回主程序。
⑧程序结束。
运行时程序的流程应该是这样的:
-----------------------------------------------------------------------|
| int n;
|
| cin>>n;
↓
|
|
----------------------------------------------------------------|
|
| stry(n,0)
↓
|
↑
|
|
|----------------------------------------------------|
|
|
|
stry(n/2,0)
↓
|
↑
|
|
|
|-----------------------------------------|
|
|
|
| stry((n/2)/2,0)
↓
|
↑
|
|
|
|
----------------------------|
|
|
|
|
|
........
↓
|
↑
|
|
|
|
|
-----------------|
|
|
|
|
|
| stry(1,0)
|
↑
|
|
|
|
|
|
|------处理完返回上一级
|
|
|
|
|
|
|
|----------------------------------------------------------------------|
↓
↓
程序结束