遞歸算法及其簡單的舉例


一、遞歸算法的基本知識

  1.理解什么是遞歸

    簡單的從字面意思來,就是既有傳遞又有回歸的算法,就叫做遞歸。比如:你在電影院看電影,湊巧的是你來遲了,一懵,發現自己的座位號找不到,你就開始問旁邊的人,你是第幾號,然后旁邊的人又不知道,又問旁邊的人,那個人又不知道,之后他又問旁邊的人,依次類推,等到你問到最前面的時候,那個人知道自己的座位號,就告訴他旁邊的人,然后他們一個又一個的把消息傳遞回來,直到你知道自己的作為在哪里。這就是所謂的遞歸;平常生活中,我們會碰到很多這樣的例子。這類似於我們平常聽到的一個故事,從前有座山,山上有座廟,廟里有個老和尚,老和尚給小和尚講故事,然后又是從前有座山......,這個例子很像遞歸,但它卻不是遞歸,而是循環,就像那種永遠跳不出的循環,死循環。

  2.遞歸的條件

    a. 必須要有終止條件,否則會報內存溢出的錯誤

    b. 遞歸必須有去有回

  3.遞歸與循環的區別

    遞歸是有去有回,而循環是只有去,沒有回。

二、舉例

1.用遞歸算階乘 5的階乘

【分析】  5! == 5 * 4!
      4! == 4 * 3!
      3! == 3 * 2!
      2! == 2 * 1!
    
      fn(5);
      return 5 * fn(4);

      fn(4)
      return 4 * fn(3)
 
      fn(3)
      return 3 * fn(2)

      fn(2)
      return 2 * fn(1)

      .....
代碼:
function fn(n) {
if (n == 1) return 1;
return n * fn(n - 1);
}
console.log(fn(5));
2.利用遞歸求1 - 100的和
function fn(n) {
if (n <= 1) return 1;
else
return n + fn(n - 1);
}
console.log(fn(5));
3.兔子 3 個月成年 -> 繁殖 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987
function fn(n) {
  if(n==1|| n==2) return 1;
  return fn(n-1)+fn(n-2);
}
console.log(fn(10));
4. 求最大公約數
function fn(m, n) {
  var r;
  r = m % n;
  m = n;
  n = r;
  if (r != 0) {
    return fn(m, n);
  } else {
    return m;
  }
}
console.log(fn(14, 24));
5.算1!+2!+3!+……+n!
function fn(n) {
  if (n <= 1) return 1;
  return n * fn(n - 1);
}
function fn1(n) {
  var sum = 0;
  for (i = 1; i <= n; i++) {
    sum += fn(i);
  }
  return sum;
}
console.log(fn1(4));


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM