算法导论 第二章 递归与分治

阶乘函数  斐波那契数列

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

// 阶乘函数
int fact(int n)
{
    if(!n) return 1;
    return n * fact(n-1);
}

// 斐波那契数列
int fib(int n)
{
    if(n <= 1) return 1;
    return fib(n-1)+fib(n-2);
}

int main()
{
    cout << "fact(5) "<<fact(5) <<endl;
    cout << "fib(5) "<<fib(5) <<endl;
    return 0;
}
阶乘 斐波那契

排列问题

#include <iostream>
#include <cstring>
#include <algorithm>
#include <math.h>
using namespace std;
// 数组长度 排列总数
int n, ans;

/**
 *@param s 数组首地址
 *@param k 已经匹配完成[0,k-1] 
 *@param n 数组总长度
 */
 
 
void Perm(int *s,int k, int n)
{
    if(k >= n) {
        for(int i=0; i<=n; i++) {
            cout<< s[i] <<" ";
        }
        cout<< endl;
        ans++;
        return ;
    }
    for(int i=k; i<=n; i++) {
        swap(s[k], s[i]);
        Perm(s, k+1, n);
        swap(s[k], s[i]);
    }
}
int main()
{
    // 输入数组长度 并输入相应数量的数
    cin >> n;
    int *s = new int[n];
    for(int i=0;i<n;i++) {
        cin >> s[i];
    }
    // 对输入的数 进行排序
    sort(s, s+n);
    cout <<endl;
    Perm(s, 0, n-1);
    cout << "排列总数 " << ans<<endl;
    return 0;
}
排列问题 对以后的排列树有前置作用

猜你喜欢

转载自www.cnblogs.com/Draymonder/p/9997655.html