递归问题

递归问题不必纠结于细节,只要有大局观就行,比如说我定义一个函数,我说他是干嘛的他就是干嘛的,然后我只需要将出口该干的事情写出来就行了,对于递归调用反正他就能干这件事就行了(我就是规定他是做这个的,其中n变了就行了)。

比如说有一个递归问题是:编写一个递归函数,用来输出n个元素的所有子集,那么我只需要定义一个函数P(a[],b[],n),我规定这个函数就是将a[],里面的n个元素的所有子集写出来,这时候我递归调用的时候P(a[],b[],n-1),就是a[]里面的n-1个函数的子集写出来,一直到n=1时就直接写出来他自己的元素就可以了,至于n到n-1之间的关系使我们要解决的。当我们知道了n-1个所有子集时,我们现在多了一个变量,我们需要用n-1个的子集的每一个加上这个新增元素之后,再和原来相于。

P(a[],b[],n)

{

if(n==1)

{

cout<<a[0]

}

else

{

b[]==a[n-1];

for(i=0->n-1)

{

swap(b[]<->a[i])

P(a[],b[],n-1);

swap(b[]<->a[i])

}

}

}

反正大概就是这个意思。具体细节不必太纠结。不然会疯掉的。