什麼是遞迴(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; } |
我以前學遞迴的時候真的都搞不懂為什麼會這樣,我想可能是不太懂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
文章標籤
全站熱搜