什麼是遞迴(recursive)?

 

  就是一直呼叫自己,但有條件的停止,如果沒有停止就會像無限迴圈一樣。

 

階層

 

階層幾乎是遞迴的hello world。

5!=5*4*3*2*1 = 120

6!=6*5*4*3*2*1=720

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
#include<iostream>


int face(int n)
{
	if( n==1)
		return 1;
	
	return n*face(n-1);
}


int main()
{

	std::cout<<face(6)<<std::endl;


	return 0;
}

 

image

 

  我以前學遞迴的時候真的都搞不懂為什麼會這樣,我想可能是不太懂return的意思,想說return 1不就是1嗎?為什麼那兩個值可以互乘?

 

  我們看下面這個程式,最終會印出10,這可以很直觀的去知道,但是我把程式改成了10*one(10);腦袋就打結了,這是為什麼呢?我也不知道阿,對於懂得人來說,上面face(6),不就跟10*one(10)運作原理差不多,答案就是10*10=100,那我把程式改成one(6)*one(5)*one(4)*one(3)*one(2)*one(1),是不是可以理解成6*5*4*3*2*1。

 

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
int one(int n)
{
	return n;
}

int main()
{	
	std::cout<<one(10)<<std::endl;

	return 0;
}

 

所以2! 不就是 face(2) = 2*face(1); 2*1 =2

3!  face(3) =  3*face(2) = 6; 可以看成 3*2*1

4  !face(4) = 4*face(3) = 24; 可以看成 4*3*2*1

5  !face(5) = 5*face(4) = 120; 可以看成 5*4*3*2*1

6  !face(6) = 6*face(5) = 720;  可以看成 6*5*4*3*2*1

 

 

 

 

 

 

創作者介紹
創作者 讀書小天地 的頭像
讀書小天地

書籍分享天地

讀書小天地 發表在 痞客邦 留言(0) 人氣()