回 帖 发 新 帖 刷新版面

主题:递归~~~

路过的朋友帮我看一下这个关于递归的题
它是给一个数组中的前K个元素倒置,
代码:
#include<stdio.h>
void invert(int a[],int k)
           {int t;
               if (k>1)
                  {invert(a+1,k-2);/*A处--注意看一下这儿的参数值*/
                   t=a[0];/*B--处*/
                   a[0]=a[k-1];
                   a[k-1]=t;
                  }
           }
int main(void)
{int a[10]={5,4,3,2,1,6,7,8,9,10};
 int k=5,i=0;
 invert(a,k);
 printf("now please print the a array's value:\n");
 for (i=0;i<10;i++)
      printf("%d ",a[i]);   
 return 0; 
}    
大家看下A处我们在调用的时候按a+1,k-2,第一次,a=a[1],k=3;
                                     第二次,a=[2],k=1终止递归
再返回执行B处,为什么终止递归后第一次执行B处的时候a=a[0],k=5,好象是用的主函数调用invert(a,k)时a,k的值,
我相问的是:--------
为什么不是最后一次调用递归时的a[2],1啊,???
这种没有返回值的递归到底怎么个玩法儿啊???路过的朋友详解下谢谢

回复列表 (共4个回复)

沙发

.......

板凳

这个算法的非递归形式要简单的多 并且这个形式也是很难理解

3 楼

这个递归程序是不是没有出口啊,怎么没有输出那!!
[em10]

4 楼


看了看好象有点明白了,这个递归就是为了交换a数组的前K项,然后再做交换因为a数组的第一项与第K-1项已经做完了交换,现在第一项就应该是a+1,项数变为K-2了

我来回复

您尚未登录,请登录后再回复。点此登录或注册