用几个例题学习递归

  1. 求阶乘
  2. 打印i到j
  3. 数组求和
  4. 反转字符串
  5. 斐波那契数列
  6. 最大公约数
  7. 排序改递归
  8. 汉诺塔

代码如下:

#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
using namespace std;
int n, m;
vector<int> a;
string str;
int fun1(int m) {//求阶乘
    if(m == 1) return 1;//终止条件
    return m * fun1(m - 1);
}
void fun2(int i, int j) {//求i-j
    if(i > j) return;//终止条件
    printf("%d ", i);
    fun2(i + 1, j);
}
int fun3(int temp) {//数列求和
    if(temp == a.size() - 1) return a[temp];
    return a[temp] + fun3(temp + 1);

}
int fun4(int temp) {//字符串反转
    if(temp == 0)
    printf("%c\n", str[temp]);
    else{
        printf("%c ", str[temp]);
        fun4(temp - 1);
    }
}
int fun5(int m) {//斐波那契数列
    if(m == 1 || m == 2) return 1;
    return fun5(m - 1) + fun5(m - 2);
}
int fun6(int m, int n) {//最大公约数
    if(n == 0) return m;
    return fun6(n, m % n);
}
void fun7(int n) {//插入排序
    if(n == 0) return;
    fun7(n - 1);
    int temp = a[n];//记录要插入的元素
    int index = n;
    while(index > 0 && temp < a[index - 1]) {//寻找插入位置的过程
        a[index] = a[index - 1];
        index--;
    }
    a[index] = temp;//把位置找好了,将其插入进来
}
void fun8(int n, char from, char help, char to){//汉诺塔
    if(n == 1) {
            printf("move %d from %c->%c\n", n, from, to);
    }
    else{
        fun8(n - 1, from, to, help);//1-(n-1)移到B上C做辅助
        printf("move %d from %c->%c\n", n, from, to);//最大的盘子可到目标柱子
        fun8(n - 1, help, from, to);//柱子角色发生变化
    }
}
int main(){
//    scanf("%d", &n);
//    printf("%d\n", fun(n));
//    scanf("%d%d", &n, &m);
//    fun2(n, m);
//    a = {0, 1, 2, 3, 4, 5, 6, 9};
//    printf("%d\n", fun3(0));
//     str = "abcdefghi";
//     int len = str.length() - 1;
//    fun4(len);
//    scanf("%d", &n);
//    printf("%d\n", fun5(n));
//    scanf("%d%d", &m, &n);
//    printf("%d\n", fun6(m, n));
//    a = {6, 4, 2, 3, 4, 5, 6, 9};
//    fun7(a.size() - 1);
//    for(int i = 0; i < a.size() - 1; i++) printf("%d ", a[i]);
    fun8(3, 'A', 'B', 'C');
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 一个经典的Python递归算法例题是计算阶乘。通过递归的方式,可以简洁地实现阶乘的计算。例如,可以使用以下代码来计算阶乘: ```python def factorial(n): if n == 1: return n return n * factorial(n-1) res = factorial(5) print(res) ``` 在这个例子中,我们定义了一个名为`factorial`的函数,它接受一个参数`n`,表示要求的数的阶乘。如果`n`等于1,那么阶乘的结果就是1,直接返回1。否则,我们将`n`乘以`factorial(n-1)`,也就是`n`乘以比它小1的数的阶乘。最后,我们调用`factorial(5)`来计算5的阶乘,并将结果赋给`res`变量,然后打印出结果。 这个例子展示了递归算法的简洁性和效率。通过递归,我们可以将复杂的问题简化为更小的子问题,并通过不断调用自身来解决这些子问题,最终得到整个问题的解答。递归算法在解决一些数学问题和数据结构相关的问题时非常有用。 #### 引用[.reference_title] - *1* *3* [Python递归几个经典案例](https://blog.csdn.net/qdPython/article/details/126748787)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [递归算法及经典例题详解](https://blog.csdn.net/weixin_45881074/article/details/120585865)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值