递推递归与组合
有关递推递归与组合的博客
海岛Blog
专注于程序设计及其竞赛,专注于集成电路EDA设计
展开
-
菲波拉契数列
菲波拉契数列是典型的问题,几乎出现于所有有关程序设计和算法等的书籍中。当n比较大之后,菲波拉契数列的f(n-1)/f(n)则接近于黄金分割数0.618。菲波拉契数列不仅仅有这两种计算法,其他的计算方法相对比较复杂。程序中使用条件编译,可以计数递归调用的次数和递推循环的次数,可以比较算法复杂度。/* * * 计算斐波拉契数列第n项的两种(递归和递推)算法程序 * */原创 2016-04-19 08:20:58 · 1498 阅读 · 0 评论 -
计算阶乘
这里给出递归和递推两种计算阶乘的程序。#include // 递归法计算阶乘long factorial(int n){ if(n==0 || n==1) return 1; else return n * factorial(n-1);}// 递推法计算阶乘long factorial2(int n){ long fa原创 2016-04-25 19:55:46 · 1374 阅读 · 0 评论 -
汉若塔问题算法程序
这是一个经典的问题,递归程序实现,子程序中两次调用自己。也是递归调用程序中的范例。程序中,使用条件编译来统计子程序调用次数。/* * * 汉诺塔问题算法程序 * */#include //#define DEBUG#ifdef DEBUGint c1=0;#endifvoid hanoi(int, char, char, char);void move(in原创 2016-04-18 22:58:52 · 1611 阅读 · 0 评论 -
桃子到底有多少
计算桃子有多少,有递归和递推两种方法。/* * * 问题描述:某人某日摘若干桃子,每天卖出一半并且吃掉一个,最后一天(第n天)剩下一个。 * 编写一个递归程序,天数n作为参数,计算一共摘了多少桃子。 * * 分析问题可以得出以下的递推函数: * f(1) = 1 n=1 * f(n) = 2 * ( f(n-1) + 1 ) n原创 2016-04-20 00:51:54 · 1206 阅读 · 0 评论 -
计算x的n次方
计算x的n次方有递归和递推程序。不论从时间或空间来看,自然递推优于递归。然而,二分法则是极其优的一种方法,用在计算x的n次方完全没有问题,而且不是递归而是递推的程序。程序中使用条件编译,以便于统计分析算法的计算量。/* * * 计算x的n次方程序:1.递归程序;2.非递归程序;3.二分法。 * */#include //#define DEBUG#ifdef DE原创 2016-04-20 00:28:11 · 8574 阅读 · 0 评论 -
中国马的跳法
问题:中国象棋的半张棋盘上,马从左下角跳到右上角,总共有几种跳法。求所有跳法,需要用穷尽搜索,试探法即回溯法是首选。程序中,以左上角坐标为(0,0),马从左下角(4,0)跳到右上角(0,8)。马在某个位置,一般而言有8种跳法,但是由于规定只能往右跳,所以只有4种跳法。同时如果跳出棋盘外则回溯。为了在马跳到目的地后输出结果,使用堆栈存储马跳的轨迹。/* * * 问题描原创 2016-04-20 06:24:47 · 2379 阅读 · 0 评论 -
国际马的跳法
问题:国际象棋的棋盘上,马从左上角跳到跳到,总共有几种跳法。这个问题与中国象棋的棋盘上的跳马问题完全相同,只是起始和终止坐标的不同。但是,可以比较一下所有跳法的数量,了解问题复杂度的差异。求所有跳法,需要用穷尽搜索,试探法即回溯法是首选。程序中,以左上角坐标为(0,0),马从左上角(0,0)跳到右下角(7,7)。马在某个位置,一般而言有8种跳法,但是由于规定只能往右跳,所以只有原创 2016-04-20 06:37:27 · 1301 阅读 · 0 评论 -
八皇后(N皇后)问题算法程序(回溯法)
这是一个经典问题,经常出现于各种有关程序与算法的教科书中。本程序使用递归调用的回溯法来解决问题。递归的关键是递归调用和结束条件。比起非递归的回溯法来,本程序逻辑相对比较简洁,但是时间上会略微慢一些。/* * * 【问题描述】在一个8×8的国际象棋棋盘上放置8个皇后, * 要求每个皇后两两之间不“冲突”,即没有一个皇后能“吃 * 掉”任何其他一个皇后,简单的说就是没有任何两个原创 2016-04-18 23:12:16 · 4030 阅读 · 1 评论 -
最大公约数GCD的三种算法程序
这里给出使用欧几里得算法求最大公约数的递归和非递归的程序,同时给出穷举法求最大公约数的程序。从计算时间上看,递推法计算速度最快。程序中包含条件编译语句用于统计分析计算复杂度。/* * 计算两个数的最大公约数三种算法程序 */#include //#define DEBUG#ifdef DEBUGint c1=0, c2=0, c3=0;#endifint gcd1原创 2016-04-14 14:57:05 · 23467 阅读 · 1 评论