首页 > 学院 > 开发设计 > 正文

递归那些事

2019-11-08 01:10:00
字体:
来源:转载
供稿:网友

汉诺塔

#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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表