1. 程式人生 > >遞迴演算法及經典遞迴例子程式碼實現

遞迴演算法及經典遞迴例子程式碼實現

作者:ikownyou  來源:CSDN  原文:https://blog.csdn.net/ikownyou/article/details/65633581  版權宣告:本文為博主原創文章,轉載請附上博文連結!

一、什麼叫做遞迴?

一個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法;

遞迴函式就是直接或間接呼叫自身的函式,也就是自身呼叫自己;

二、一般什麼時候使用遞迴?

   遞迴時常用的程式設計技術,其基本思想就是“自己呼叫自己”,一個使用遞迴技術的方法即是直接或間接的呼叫自身的方法。遞迴方法實際上體現了“以此類推”、“用同樣的步驟重複”這樣的思想,它可以用簡單的程式來解決某些複雜的計算問題,但是運算量較大。     還有些資料結構如二叉樹,結構本身固有遞迴特性;此外,有一類問題,其本身沒有明顯的遞迴結構,但用遞迴程式求解比其他方法更容易編寫程式,如八皇后問題、漢諾塔問題等。

    正因為遞迴程式的普遍性,我們應該學會使用遞迴來求解問題。直接遞迴程式與間接遞迴中都要實現當前層呼叫下一層時的引數傳遞,並取得下一層所返回的結果,並向上一層呼叫返回當前層的結果。至於各層呼叫中現場的儲存與恢復,均由程式自動實現,不需要人工干預。因此,在遞迴程式的設計中關鍵是找出呼叫所需要的引數、返回的結果及遞迴呼叫結束的條件。

三、例項 1.遞迴求和1+2+3+.....+n

public static Integer recursionSum(Integer n){    if(n>0){       return n+recursionSum(n-1);    }else{       return 0;    } } 2.遞迴階乘n! = n * (n-1) * (n-2) * ...* 1(n>0)

public static Integer recursionMulity(Integer n){    if(n==1){       return 1;    }    return n*recursionMulity(n-1); } 3.河內塔問題

4.判定一系列字串中是否有相同的內容

public static boolean fun(int n,String[] a){    boolean b = false;    if(n == a.length){       b = true;    }else{       for(int i = n; i < a.length-1; i++){          System.out.println(n+"    "+(i+1));          if(a[n].equals(a[i+1])){             return false;          }       }       n++;       fun(n,a);    }    return b; } --------------------- 

常見的例子就先介紹到這兒, 還是需要大家平時在工作中多多去實踐, 多多去體會, 方可達到融會貫通, 舉一反三的效果, 程式源於生活, 卻有高於生活!