码迷,mamicode.com
首页 > 其他好文 > 详细

从全排列看递归

时间:2016-06-26 19:47:04      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

1、什么是递归

     1)举个生活中的例子:假设有一项很繁重的工作,我们总能把它划分为:总工作量=今天的工作+剩下的工作,只要我们每天都在坚持,一点点继续,那么剩下的工作会越来越少,总有一天,我们可以实现我们的梦想!(程序员的自我安慰~)

     2)数学上来看:

         例如:n的阶乘 f(n) = n!,n为整数

                 f(n) = 1   n<= 1                       (1)

                          n*f(n-1) n >1                  (2)

    • 有一个基础部分:它包含一个或多个值,对这些值,f(n)是直接定义的,如(1)。
    • 在递归部分,右侧有一个参数小于n,因此重复应用递归部分,可以把右侧f的表达式转变为基础部分,如(2)。    
    • 从整体来看,递归运行的过程,像归纳证明的逆过程      

2、从全排列看递归

   改一个字符数组,输出由这些字符组成的全排列:

        

#include <iostream>
#include <cstdlib>
using namespace std;

template <class T>
void print(T*p,int num)
{
    for(int i = 0;i < num;i++)
    {
        cout<<p[i]<<" ";
    }
    cout<<endl;
}

template <class T>
void permutations(T *p,int first,int last)
{
    if(first == last)   //当first = last,p[first:last]只有一个全排列
       print(p,last+1);
    else{               // p[first:last] 有多于一个排列,递归生成这些排列
        for(int i = first;i <= last;i++)
        {
            swap(p[i],p[first]);
            permutations(p,first+1,last);
            swap(p[i],p[first]);
        }
    }

}


int main()
{
    cout << "please enter the numbers!" << endl;
    char num;
    int countNum = 0;
    char arrayNum[1000];
    while(cin >> num && num != 0)
    {
        arrayNum[countNum] = num;
        countNum++;
    }
    cout<<endl;
    permutations(arrayNum,0,countNum-1);
    return 0;
}

 

   

从全排列看递归

标签:

原文地址:http://www.cnblogs.com/1995hxt/p/5598459.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!