递归那些事

本文解析了汉诺塔、骑士游历、八皇后等经典算法问题的实现思路与代码细节,并探讨了递归、回溯等算法的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

汉诺塔

#include <stdio.h>
void Hanoi(int i, char a, char b, char c);
void Move(int n, char a, char b);
int main()
{
    int n;
    printf("please input the number of disk");
    scanf("%d", &n);
    printf("step of move %d disks from A to B by mean of C:\n", n);
    Hanoi(n, 'A', 'B', 'C');
    return 0;
}
void Hanoi(int i, char a, char b, char c)
{
    int n = i;
    if(n == 1)
        Move(n, a, b);
    else
    {
        Hanoi(n - 1, a, c, b);  // A -> C
        Move(n, a, b);          // A -> B
        Hanoi(n - 1, c, b, a);  // C -> B
    }
}
void Move(int n, char a, char b)
{
    printf("move %d :from %c to %c \n", n, a, b);
}

骑士游历

【骑士游历问题】
设有一个m×n的棋盘(2≤m≤50,2≤n≤50),在棋盘上任一点有一个中国象棋“马”,马走的规则为:马走日字;马只能向右走。当m,n给出后,同时给出马起始的位置和终点的位置,试找出从起点到终点所有路径的数目。
输入:
m,n,x1,y1,x2,y2 (分别表示m,n、起点坐标和终点坐标)
输出:
路径数目(若不存在,则输出0)

八皇后(回溯法)

电子老鼠闯迷宫(递归算法)

Fibonacci(兔子繁殖)

#include<stdio.h>
int fib(int n);

int main()
{
    int n, i;
    scanf("%d", &n);
    for (i = 0; i <= n; i++)
    {
        printf("fib(%d)=%d\n", i, fib(i));
    }
    return 0;
}
int fib(int n)
{
    if (n ==0 ) return 0;
    else if(n ==1) return 1;
    else
    {
        return fib(n-1) + fib(n-2);
    }
}

辗转相除(迭代)

#include <stdio.h>
int MaxCommonFactor(int a, int b);
int main()
{
     int a, b, x;
     printf("Input a,b:");
     scanf("%d,%d", &a, &b);
     x =MaxCommonFactor(a, b);

     if (x != -1)
     {
          printf("MaxCommonFactor = %d\n", x);
     }
     else
     {
          printf("Input error!\n");
     }

     return 0;
}

//函数功能: 计算两个正整数的最大公约数,-1表示没有最大公约数
int MaxCommonFactor(int a, int b)
{
     int r;
     if (a<=0 || b<=0) return -1; // 保证输入的参数为正整数

     do{
          r = a % b;
          a = b;
          b = r;
     }while (r != 0);

     return  a;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值