1、遞歸函數(shù)的概念
成都創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、鎮(zhèn)安網(wǎng)絡(luò)推廣、微信小程序開發(fā)、鎮(zhèn)安網(wǎng)絡(luò)營(yíng)銷、鎮(zhèn)安企業(yè)策劃、鎮(zhèn)安品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);成都創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供鎮(zhèn)安建站搭建服務(wù),24小時(shí)服務(wù)熱線:18980820575,官方網(wǎng)址:www.cdcxhl.com
遞歸是一種針對(duì)使用簡(jiǎn)單的循環(huán)難以編程實(shí)現(xiàn)的問題,提供優(yōu)雅解決方案的技術(shù)。簡(jiǎn)單來說,遞歸方法是調(diào)用自身的方法。在編程語言中,函數(shù)Func(Type a,……)直接或間接調(diào)用函數(shù)本身,則該函數(shù)稱為遞歸函數(shù)。遞歸函數(shù)不能定義為內(nèi)聯(lián)函數(shù)。
2、實(shí)現(xiàn)遞歸的三要素
(1)一定有一種可以退出程序的情況;
(2)總是在嘗試將一個(gè)問題化簡(jiǎn)到更小的規(guī)模;
(3)父問題與子問題不能有重疊的部分。
3、Java遞歸算法案例
Java中的遞歸函數(shù)如果沒終止條件會(huì)造成死循環(huán),所以遞歸代碼里要有結(jié)束自調(diào)自的條件。接下來通過一個(gè)案例來學(xué)習(xí)如何使用遞歸算法。
package QianFeng03;
//階乘(遞歸算法)
public class FactorialTest {
public static void main(String[] args){
int result = factor1( 10);
System.out.println(result);
int result1 = factor(10);
System.out.println("遞歸算法:內(nèi)存消耗大容易內(nèi)存溢出"+result1);
}
//---------------遞歸算法,方法本身調(diào)用自己----------------------
public static int factor(int num){
if (num==1)
return 1;
return num*factor(num-1);
}
//---------------普通計(jì)算----------------------
public static int factor1(int num){
int result = num;
int i= num-1;
do{
result = result*i;
i--;
}while (i>1);
return result;
}
}
4、遞歸函數(shù)與循環(huán)的關(guān)系:
(1)聯(lián)系:
都是通過控制一個(gè)變量的邊界(或者多個(gè)),來改變多個(gè)變量為了得到所需要的值,而反復(fù)而執(zhí)行的;都是按照預(yù)先設(shè)計(jì)好的推斷實(shí)現(xiàn)某一個(gè)值求??;(請(qǐng)注意,在這里循環(huán)要更注重過程,而遞歸偏結(jié)果一點(diǎn))
(2)區(qū)別:
遞歸通常是逆向思維居多,“遞”和“歸”不一定容易發(fā)現(xiàn);而循環(huán)從開始條件到結(jié)束條件,包括中間循環(huán)變量,都需要表達(dá)出來。簡(jiǎn)單的來說就是:用循環(huán)能實(shí)現(xiàn)的,遞歸一般可以實(shí)現(xiàn),但是能用遞歸實(shí)現(xiàn)的,循環(huán)不一定能。因?yàn)橛行╊}目①只注重循環(huán)的結(jié)束條件和循環(huán)過程,而往往這個(gè)結(jié)束條件不易表達(dá);②只注重循環(huán)的次數(shù)而不注重循環(huán)的開始條件和結(jié)束條件。