Recursive

Recursive Insert sort

递归解决,假设前n个已经排好序,当然,插入得时候可以二分插入。

#include <bits/stdc++.h>
using namespace std;

void recursive_insert_sort(int arr[], int n) {
    if (n > 1) {
        recursive_insert_sort(arr, n - 1);
        int tmp, i = n - 1;
        while (i >= 1 && arr[i] < arr[i - 1]) {
            tmp = arr[i];
            arr[i] = arr[i - 1];
            arr[i - 1] = tmp;
            i--;
            }
        }
}

int main() {
    int n, num[10];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &num[i]);
    recursive_insert_sort(num, n);
    for (int i = 0; i < n; i++) printf("%d ", num[i]);
    return 0;
}

Recursive Knapsack

递归求背包,前面都选择最优,然后最后一个选择当前价值最高。

#include <bits/stdc++.h>  
using namespace std;  

int recursive_knapsack(const vector<int>& w, const vector<int>& v, int index, int capacity) {  
    if (index < 0 || capacity <= 0) return 0;  

    int res = recursive_knapsack(w, v, index - 1, capacity);  
    if (w[index] < capacity) {  
        res = max(res, v[index] + recursive_knapsack(w, v, index - 1, capacity - w[index]));  
    }  
    return res;  
}  

int main() {  
    int n, C;  
    cin >> n >> C;  
    vector<int> w(n), v(n);  
    for (int i = 0; i < n; i++) cin >> w[i];  
    for (int i = 0; i < n; i++) cin >> v[i];  
    cout <<  "背包最大价值为" <<recursive_knapsack(w, v, n - 1, C) << endl;  
}

Recursive Fibonacci

公式模板

#include <bits/stdc++.h>
using namespace std;

int recursive_fibonacci(int n) {
    if (n <= 1) return n;
    return recursive_fibonacci(n - 1) + recursive_fibonacci(n - 2);
}

int main() {
    int n;
    cin >> n;
    cout << recursive_fibonacci(n);
}

Recursive Hanoi

把n-1个从src移动到aux,那么剩下最大的直接放到dst,然后把aux上的n-1个放到dst就可以了。

#include <bits/stdc++.h>
using namespace std;

void recursive_hanoi(int n, char src, char aux, char dst) {
    // 如果只剩一个盘子,直接放过去
    if (n == 1) {
        printf("%d %c->%c\n", n, src, dst);
        return;
    }
    // 那n-1个盘子借助目标盘子放到辅助盘子上,这一就只剩一个了;
    recursive_hanoi(n - 1, src, dst, aux);
    // 只剩一个直接移动过去;
    printf("%d %c->%c\n", n, src, dst);
    // 然后把n-1个盘子放到目标盘子,就完成了
    recursive_hanoi(n - 1, aux, src, dst);
}

int main() {
    int n;
    cin >> n;
    recursive_hanoi(n, 'A', 'B', 'C');
    return 0;
}

Recursive Basic Calculator

这个题目并不复杂,下面的题解是粘过来的。
这里还是想说一下,这个思路的核心还是通过”()”前的符号来确定括号内的数字的符号,这样就变成了去括号的纯加减法。

#include <bits/stdc++.h>  
using namespace std;  

class Solution {  
public:  
    int calculate(string s) {  
        int ans = 0;  
        int num = 0;  
        int sign = 1;  
        stack<int> stack{{sign}};  

        for (const char c : s)  
            if (isdigit(c))  
                num = num * 10 + (c - '0');  
            else if (c == '(')  
                stack.push(sign);  
            else if (c == ')')  
                stack.pop();  
            else if (c == '+' || c == '-') {  
                ans += sign * num;  
                sign = (c == '+' ? 1 : -1) * stack.top();  
                num = 0;  
            }  

        return ans + sign * num;  
    }  
};  

int main() {  
    Solution test = *new Solution;  
    cout << test.calculate("(1+(4+5+2)-3)+(6+8)");  
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇