zoukankan      html  css  js  c++  java
  • 数据结构之递归

    • 编程实现斐波那契数列求值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("
    ");
        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 << ' ';
    }
    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;
    }


  • 相关阅读:
    「2017 山东三轮集训 Day1」Flair
    Luogu P4321 随机漫游
    「WC2018」通道
    「CTSC2018」暴力写挂
    关于二项式相乘
    BZOJ #3625 CF #438E 小朋友和二叉树
    GIS可视化
    微信小程序Promise对象
    SQL Server-执行计划教会我如何创建索引
    IIS+NGINX 负载web服务器
  • 原文地址:https://www.cnblogs.com/hrnn/p/13338949.html
Copyright © 2011-2022 走看看