1衣摩、知乎回答摘錄
圖解
遞歸是一個樹結構,每個分支都探究到最遠捂敌,發(fā)現無法繼續(xù)的時候往回走艾扮,
每個節(jié)點只會訪問一次既琴。
迭代是一個環(huán)結構,每次迭代都是一個圈泡嘴,不會拉掉其中的某一步甫恩,然后不斷循環(huán),
每個節(jié)點都會被循環(huán)訪問酌予。
給迭代舉個通俗點的例子:假如你有一條哈士奇和一條中華田園犬磺箕,怎么讓它們串出比較純正的哈士奇呢?先讓哈士奇與中華田園犬配對抛虫,生下小狗松靡。再讓哈士奇與小狗配對,當然要等小狗長大后莱褒。就這樣一直讓哈士奇與新生的小狗配對击困,一代一代地迭涎劈,最終你能得到比較純正的哈士奇广凸。
遞歸,簡講就是自己調用自己蛛枚,自己包含自己谅海。
用程序表述就是:void f(int n){f(n - 1);}不要在意這是死循環(huán)代碼,只需知道這個函數中蹦浦,又調用了函數自身扭吁,屬于自己調用自己。
//迭代:
int func(n)
{
int s=1;
for(int i=1;i<=n;i++)
{
s*=i;
}
return s;
}
//遞歸:
int func(n)
{
int s=1;
if(n>1)
{
s=n*func(n-1);
}
}
//遞歸:(遞推到回歸)不停調用自己盲镶,是迭代的特例侥袜,時間復雜度低,耗費空間溉贿。
//迭代:A不停調用B枫吧。
摘自:https://www.zhihu.com/question/20278387
小規(guī)模漢諾塔問題
摘自:http://chenqx.github.io/2014/09/29/Algorithm-Recursive-Programming/