天天看點

每天三道沖刺工作--如何用遞歸算法判斷一個數組是否是遞增

http://www.cnblogs.com/cysolo/p/3584059.html?utm_source=tuicool

思路分析:

遞歸嘛之前數組求和已經見識到了,就是自己調用自己嘛。但是,這裡一定要注意一點,凡是要求用“遞歸算法”的,你在遞歸之前一定要先分類讨論,判斷一下目前條件是否允許遞歸,比如一個數組長度就是1,你用遞歸去判斷它裡面的某兩個元素的大小,這就要出Bug了。還有既然遞歸的目的是判斷,那要寫的遞歸函數就是個bool類型的。最最重要的是,數組操作一定要注意下标越界問題,數組下标隻能在0到數組長度減1之間的。

代碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

// 1314.cpp : 定義控制台應用程式的入口點。

//

#include "stdafx.h"

void

Judge(

int

*a,

int

n)

{

if

(n == 1){

printf

(

"遞增"

); }

if

(n != 1)

{

if

(a[n-1] >= a[n - 2]){ Judge(a, n - 1); }

if

(a[n-1] < a[n - 2]){

printf

(

"非遞增"

); }

}

}

int

_tmain(

int

argc, _TCHAR* argv[])

{

int

a[] = {1,2,3,3,4,5};

int

len =

sizeof

(a) /

sizeof

(a[0]);

Judge(a, len);

getchar

();

return

0;

}

  效果如圖:

每天三道沖刺工作--如何用遞歸算法判斷一個數組是否是遞增

遞歸的方法,記錄目前最大的,并且判斷目前的是否比這個還大,大則繼續,否則傳回false結束:

bool fun(int a[], int n)

{

    if(n= =1)

        return true;

    if( n= =2 )

        return a[n-1] >= a[n-2];

    return fun( a,n-1) && ( a[n-1] >= a[n-2] );

}