数据结构之递归

  • 编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2)
  • 编程实现求阶乘n!
  • 编程实现一组数据集合的全排列

编程实现斐波那契数列求值f(n)=f(n-1)+f(n-2)

int GetNum(int N)
{
    if(N>2)
    {
        return GetNum(N-1)+GetNum(N-2);
    }
    else if(N==2)
        return 2;
    else if(N==1)
        return 1;
    else if(N==0)
        return 0;
}

编程实现求阶乘n!

#include <stdio.h>
int main()
{
    int i,n;
    double sum=1;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        sum=sum*i;
    printf("%d!=%lf",n,sum);
    printf("\n");
    return 0;
}

编程实现一组数据集合的全排列
#include"bits/stdc++.h"
using namespace std;
void swap(int a[],int i,int j){ //交换数组中两元素位置
   int temp=a[i];
   a[i]=a[j];
   a[j]=temp;
}
void printArry(int a[],int n){//打印输出数组元素
   for(int i=0;i<n;i++){
      cout<<a[i]<<" ";
   }
   cout<<endl;
}
void perm(int a[],int p,int q){//全排函数:对于数组a,下标p到下标q的元素进行全排列
   if(p==q){//终止条件:当对一个元素进行全排时打印输出
      printArry(a,q+1);
   }
   else{//全排列核心代码
         for(int i=p;i<=q;i++){//遍历全排列范围的每个元素
         swap(a,i,p);//使得第一个元素(下标为p)分别与遍历中的每个元素进行位置互换
         perm(a,p+1,q);//在上一步的基础上,其他的元素进行全排列(核心代码需要理解)
         swap(a,i,p);//回溯过程:由于20行中数组中的元素分别与下标为p的的元素交换过位置,现在要复位。
      }
   }
}
int main()//主函数
{
   int a[6]={1,2,3,4,5,6};
   perm(a,0,5);

   return 0;
}


#include "iostream"
#include "string.h"
using namespace std;
int c[10] ={1,2,3};
void print()
{
    for (int i = 0; i < 10; ++i)
    {
        cout << c[i];
    }
    cout << '\n';
}
void change(int m,int n)
{
    int t;
    t = c[m];
    c[m] = c[n];
    c[n] = t;
}
int pl(int a,int b)//递归实现
{
    if(a == b)
    {
        print();
        return 0;
    }

    else
    {
        for (int i = a; i <=b; ++i)
        {
            change(i,a);
            pl(a+1,b);
            change(i,a);
        }
    }
}
int main()
{
    pl(0,2);
    return 0;
}


posted on 2020-07-19 10:46  滚雪球效应  阅读(182)  评论(0编辑  收藏  举报