直接或間接的呼叫自己的函式稱為遞迴函式。 乙個過程或函式在其定義或說明中有直接或間接呼叫自身的一種方法,它通常把乙個大型複雜的問題層層轉化為乙個與原問題相似的規模較小的問題來求解,遞迴策略只需少量的程式就可描述出解題過程所需要的多次重複計算,大大地減少了程式的**量。 遞迴的主要思考方式在於:把大事化小
最簡單的遞迴:數n的階乘是從 1到n的乘積。
#include
using
namespace std;
intfactorial
(int m)
intmain()
輸出的結果為:
結論:遞迴函式必須定義乙個終止的條件,否則,函式會「永遠」遞迴下去,這意味著一直呼叫自身直到程式棧耗盡。
遞迴的兩個條件:
(1)存在限制條件,當滿足這個限制條件的時候,遞迴便不再繼續;
(2)每次遞迴呼叫之後越來越接近這個限制條件。
例如:接受乙個整型值(無符號),按照順序列印它的每一位。 例如: 輸入:1234,輸出 1 2 3 4.
using
namespace std;
void
print
(unsigned n)
printf
("%d "
, n%10)
;}intmain()
1、優點:
(1)**簡潔、整齊、篇幅簡短。
2、缺點:
(1)時間和空間的消耗比較大
遞迴由於是函式呼叫自身,而函式的呼叫時消耗時間和空間的,每一次函式呼叫,都需要在記憶體棧中分配空間以儲存引數,返回值和臨時變數,而往棧中壓入和彈出資料也都需要時間,所以降低了效率。
(2)重複計算
遞迴中每一次呼叫自身,會重複計算這個函式,計算量大,時間消耗會增大。
(3)呼叫棧溢位
在沒有滿足遞迴的必要條件下使用遞迴,隨著呼叫次數的增加,占用記憶體的逐漸增加,最終會出現程式棧的溢位。
(4)理解困難
相比較迴圈而言,遞迴的理解需要貫穿整個遞迴程式,較迴圈困難。
遞迴的使用
遞迴即方法體內呼叫自身方法,如果沒有十足的把握就盡量不要使用遞迴方法 用不好就出現記憶體溢位 如果沒有十足的把握就盡量不要使用遞迴方法,用不好就會出現記憶體溢位 一定要給遞迴函式出口 尋找遞迴的出口很重要。遍歷某個目錄下的所有檔案 使用遞迴的方法 迭代出某個目錄下的所有檔案。public stati...
遞迴的使用
1.遞迴和非遞迴分別實現求第n個斐波那契數。2.編寫乙個函式實現n k,使用遞迴實現 3.寫乙個遞迴函式digitsum n 輸入乙個非負整數,返回組成它的數字之和,例如,呼叫digitsum 1729 則應該返回1 7 2 9,它的和是19 4.編寫乙個函式 reverse string char...
遞迴的使用
package com.liaojianya.chapter1 this program demonstrates the use of recursion method.implementing 1 2 3 n.author liao jianya 2016年7月21日 public class ...