实验一 递归与分治策略

时间:2025-03-10

介绍2题 整数划分和递归算法!

实验 递归与分治策略

一、 实验目的

1、 掌握递归的概念和递归函数的设计方法;

2、 掌握分治的思想和用分治法解决实际问题。

二、 实验内容

1、 整数划分问题

问题描述:将正整数n表示成一系列正整数的和,即

n=n1+n2+…+nk(其中n1>=n2>=…>=nk,nk>=1)

正整数n的这种表示称为正整数n的划分。正整数n的不同划分个数称为正整数n的划分数,记作p(n)。

设计程序实现求正整数n的划分数。

程序实现:

#include<iostream.h>

#include<conio.h>

#include <iomanip.h>

int q(int n,int m)//求对整数n不大于m的划分数

{

if((n<1)||(m<1)) return 0;

if

if

if

return q(n,m-1)+q(n-m,m);

}

void main()

{

int N,M;

char flg;

do{

cout<<"请输入你要划分的正整数N和最大的加数M" <<endl;

cin >>N;

cin>>M;

cout<<"对正整数: "<<N<<" 不大于 "<<M<<"的最大划分数有:"<<endl; cout<<q(N,M)<<" 个"<<endl;

cout<<"是否继续输入(Y/y)?按其它任意键退出";

cin>>flg;

}while(flg == 'Y' ||flg == 'y');

}

算法验证:请通过适当的测试用例来测试以上程序的正确性。

例如正整数6不大于6的划分有11种,即q(6,6)=11。正整数7不大于7的划分有15

介绍2题 整数划分和递归算法!

种,即q(7,7)=15。

并说明为什么选用这些测试用例。

2、 棋盘覆盖问题

问题描述:

在一个2k×2k 个方格组成的棋盘(如图1-1)中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌(如图1-2)覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。

图1-1 棋盘

#include<iostream.h>

#include<conio.h>

#include <iomanip.h>

#include<stdio.h>

#define BOARD_SIZE 4

int Board[BOARD_SIZE][BOARD_SIZE];

void ChessBoard(int tr,int tc,int dr,int dc,int size)

{

static int tile=1;

if(size==1) return;

int t = tile++,

s = size/2;

if(dr<tr+s && dc< tc+s)

ChessBoard(tr,tc,dr,dc,s);

else{

Board[tr+s-1][tc+s-1]=t;

ChessBoard(tr,tc,tr+s-1,tc+s-1,s);

}

if(dr<tr+s && dc>=tc+s)

ChessBoard(tr,tc+s,dr,dc,s);

else{

Board[tr+s-1][tc+s]=t;

ChessBoard(tr,tc+s,tr+s-1,tc+s,s);

}

图1-2 四种不同的L型骨牌

介绍2题 整数划分和递归算法!

if(dr>=tr+s&&dc<tc+s)

ChessBoard(tr+s,tc,dr,dc,s); else{

Board[tr+s][tc+s-1]=t;

ChessBoard(tr+s,tc,tr+s,tc+s-1,s); }

if(dr>=tr+s&&dc>=tc+s)

ChessBoard(tr+s,tc+s,dr,dc,s); else{

Board[tr+s][tc+s]=t;

ChessBoard(tr+s,tc+s,tr+s,tc+s,s); }

}

void main()

{

int i,j;

Board[2][2]=0;

ChessBoard(0,0,2,2,BOARD_SIZE); for(i=0;i<BOARD_SIZE;i++) {

for(j=0;j<BOARD_SIZE;j++) {

printf("%-4d",Board[i][j]); }

printf("\n");

}

}

------------------------Mr.sheng

实验一 递归与分治策略.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219