快速解析 遞迴與分治思想
#include<stdio.h>
int main()
{
int i;
int a[40];
a[0]=0;
a[1]=1;
for(i =2; i <40; i++)
{
a[i]= a[i -1]+ a[i -2];
printf("%d", a[i]);
}
return0;
}
intFib(int i)
{
if(i <2)
return i ==0?0:1
returnFib(i -1)+Fib(i -2);
}
- 迭代和遞迴的區別是:迭代使用的是迴圈結構,遞迴使用的是選擇結構
- 使用遞迴使程式的結構更清晰,更簡潔,更容易讓人理解,從而減少讀懂程式碼的時間
- 大量的遞迴呼叫會減少函式的副本,會消耗大量的時間和記憶體,而迭代則不需要此種付出
- 遞迴函式分為呼叫和回退階段,遞迴的回退順序是它呼叫順序的逆序
//將 n 個盤子從 x 藉助 y 移動到 z
void
{
if(1== n)
{
printf("%c --> %c\n", x, z);
}
else
{
move(n -1, x, z, y);//將 n - 1 個盤子從 x 藉助 z 移動到 y 上
printf("%c --> %c\n", x, z);//將第 n 個盤子從 x 移動到 z 上
move(n -1, y, x, z);//將 n - 1 個盤子從 y 藉助 x 移動到 z 上
}
}
int main()
{
int
printf("請輸入層數: ");
scanf("%d",&n);
move(n,'X','Y','Z');
return0;
}
#include<stdio.h>
int count =0;
int notdanger(int row,int j,int(*chess)[8])
{
int i, flag1, flag2, flag3, flag4, flag5;
//判斷列方向
for(i =0; i <8; i++)
{
if(*(*(chess + i)+ j)!=0)
{
flag1 =1;
break;
}
}
//判斷左上方
for(i = row, k = j; i <8&& k <8; i++, k++)
{
if(*(*(chess + i)+ k)!=0)
{
flag2 =1;
break;
}
}
//判斷右下方
for( i = row, k = j; i <8&& k <8; i ++, k ++)
{
if(*(*(chess + i)+ k )!=0)
{
flag3 =1;
break;
}
}
//判斷右上方
for( i = row, k = j; i >=0&& k <8; i--, k++)
{
if(*(*(chess + i)+ k)!=0)
{
flag4 =1;
break;
}
}
//判斷左下方
for( i = row, k = j; i <8&& k >=0; i++, k--)
{
if(*(*(chess + i)+ k)!=0)
{
flag5 =1;
break;
}
}
if( flag1 || flag2 || flag3 || flag4 || flag5)
{
return0;
}
else
{
return1;
}
}
//引數row :表示起始行
//引數n :表示列數
//引數(*chess)[8] : 表示指向棋盤每一行的指標
voidEightQueen(int row,int n,int(*chess)[8])
{
int chess2[8][8], i, j;
for(i =0; i <8; i++)
{
for(j =0; j <8; j++)
{
chess2[i][j]= chess[i][j];
}
}
if(8== row)
{
printf("第 %d 種", count +1);
for(i =0; i <8; i++)
{
for(j =0; j <8; j++)
{
-
相關推薦
快速解析 遞迴與分治思想
分治思想: 斐波那契數列的迭代實現:(兔子繁殖問題) #include<stdio.h>int main(){ int i; int a[40]; a[0
遞迴與分治--快速排序
#include<cstdio> #include<algorithm> using namespace std; int Partition(int a[], int s, int t) //劃分演算法 { int i = s, j = t; int tmp = a[
Java語言描述:遞迴與分治策略之合併排序與快速排序
合併排序: package DivideAndConquer; public class MergeSort { //一定要多傳入一個多餘的temp陣列用於存放排序的中間結果 public static<AnyType extends Comparable&l
演算法分析 遞迴與分治
1. Fibonacci數列 無窮數列1,1,2,3,5,8,13,21,34,55,……,稱為Fibonacci數列。它可以遞迴地定義為: 第n個Fibonacci數可遞迴地計算如下: int fibonacci(int n)  
演算法導論 第二章 遞迴與分治
階乘函式 斐波那契數列 #include <iostream> #include <cstring> #include <algorithm> using namespace std; // 階乘函式 int fact(in
演算法設計與分析(一)——遞迴與分治
目錄 D、走迷宮 提示: 提示: NOJ 2018.9.21 A、二分查詢 時限:1000ms 記憶體限制:10000K 總時限:3000ms 描述 給定一個單調遞增的整數序列,問某個整數是否在序列中。 輸入
python快速排序遞迴與非遞迴
寫在前面 眾所周知,快速排序相對於選擇排序,插入排序,氣泡排序等初級排序有著天然的優勢。這是因為快排在交換元素的過程中,兩個發生交換的元素,距離較遠。比如插入排序,新的元素要在已經有序的序列中,一次又一次地找到它應該處於的位置,交換的次數遠遠高於快排。但是,使
遞迴與分治策略——找峰頂問題
問題 給定含有n個不同元素的陣列L=<x1,x2,…,xn>,如果L中存在xi,使得x1<x2<…<xi-1xi+1>…>xn ,則稱L是單峰序列,並稱xi是L的峰頂。假設L是單峰的,設計一個演算法找到L的峰頂,並從理論上分析演算法的
計算機演算法設計與分析之遞迴與分治策略——二分搜尋技術
遞迴與分治策略 二分搜尋技術 我們所熟知的二分搜尋演算法是運用分治策略的典型例子,針對這個演算法,先給出一個簡單的案例。 目的:給定已排好序的n個元素a[0:n-1],現要在這n個元素中找出一特定的元素x。 我們首先想到的最簡單的是用順序搜尋方法,逐個比較a[0:n-1]中元素,直至找出元
第2章 遞迴與分治策略,二分搜尋技術(查詢不成功時,返回區間位置)
當要查詢的數x不在有序陣列a中時,返回第一個大於x的數的位置或第一個小於x的數的位置 lowend,midend,highend表示查詢結束時各遊標的值,low,mid,high表示使查詢結束的最後一次操作時,各遊標的值。 查詢結束的條件是lowend>highe
演算法設計與分析筆記之(2):遞迴與分治策略
宣告 1)本文僅供學術交流,非商用。具體引用的資料請看參考文獻。如果某部分不小心侵犯了大家的利益,請聯絡博主刪除。 2)本人才疏學淺,整理總結的時候難免出錯,還望各位前輩不吝指正,謝謝。 聯
萬惡的期末考試---演算法複習---遞迴與分治策略(二分搜尋與大數乘法與矩陣對角線相加,strassen矩陣乘法,棋盤覆蓋)
已經考過三科了,還有三科,明天下午就要考演算法了,心慌慌,抓緊寫個部落格做演算法複習,靜靜心 呃呃呃 說好的只是複習下,自己拓展到了天外 ,第二章還沒結束....程式碼如下 大數乘法過程如下: 二分搜尋與大數乘法與矩陣對角線相加 package chap2_dgfz
演算法設計與分析之遞迴與分治策略
分治法: 將一個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。 (1)可行性:如果原問題可分割成k個子問題(1<k<=n),且這些子問題都可解,並可利用這些子問題的解求出原問題的解,那麼分治法就是可行的。 (2)分治法與
演算法期末複習-----遞迴與分治
第二章遞迴與分治 直接或間接地呼叫自身的演算法稱為遞迴演算法。用函式自身給出定義的函式稱為遞迴函式。 1.全排列 演算法思想:當n=1時,Perm(R)=(r),當n>1時,perm (R)=(r1)perm(R1),Ri=R-{ri),而perm(R
詳細解說遞迴與分治演算法,一文帶你入門到熟悉
全文共 2114 字,閱讀文字大概需要 3.8 分鐘。 前言 這幾天看到交流有人群裡說有關遞迴的棧溢問題,剛好小編又看到有關遞迴的東西,給大家闡述一下遞迴和分治的內容,讓各位更加理解有關前賢的各種化整為零。 正文 很多人認為遞迴是語言中最為難以理解的內容之一,其
計算機演算法設計與分析——遞迴與分治策略(一)
遞迴: 直接或者間接地呼叫自身的演算法稱為遞迴。用函式自身給出定義的函式成為遞迴函式。 使用遞迴技術往往使函式的定義和演算法的描述簡潔且易於理解。有些資料結構,如二叉樹等,由於其本身固有的遞迴特性,特別適合用遞迴的形式來描述。另外,還有一些問題,雖然其本身沒
快速排序遞迴與非遞迴演算法
快速排序是不穩定的,是對氣泡排序的改進。它的改進之處在於每輪會使一個基數歸位,同時可以使基數兩邊的兩組數基本有序(基數左邊的數都小於基數,基數右邊的數都大於基數)它的平均時間複雜度O(nlogn),最壞時間複雜度就是退化成氣泡排序O(n^2)思路無論是遞迴還是非遞迴,都需要給
第二章 遞迴與分治策略(排列的字典序問題)
一. 遞迴 1.概念 直接或間接地呼叫自身的演算法。用函式自身給出定義的函式稱為遞迴函式。 2.說明 (1)每個遞迴函式都必須有非遞迴定義的初始值,否則,遞迴函式就無法計算。 (2)遞迴式的主
遞迴與分治策略-2.11迴圈賽日程表
設有n=2^k個運動員要進行網球迴圈賽,現要設計一個滿足以下要求的比賽日程表: (1)每個選手必須與其他n-1個選手各賽一次; (2)每個選手一天只能賽一次; (3)迴圈賽一共進行n-1天。 按
1. 遞迴與分治
遞迴 在函式內部,可以呼叫其他函式。如果一個函式在內部呼叫自身本身,這個函式就是遞迴函式。 n-皇后 &nb