基础算法 —— 递归算法
生活随笔
收集整理的這篇文章主要介紹了
基础算法 —— 递归算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【概述】
【兩個問題】
注:遞歸終止條件通常就是得出最小問題的解,并返回給他的調用者。
【間接遞歸與直接遞歸】
? ? 1.直接遞歸調用:就是在函數f中直接調用函數f本身
????2.間接遞歸調用:就是在函數f1中調用另外一個函數f2,而該函數f2又調用了函數f1
【經典應用】
1.遞歸求和
void Sum(int n) {if(n>1)return n+Sum(n-1);elsereturn 1; }2.遞歸求階乘
階乘的遞歸公式:
int F(int n) { if(n==0)return 1; return n*F(n-1); }3.斐波那契數列遞歸實現
int Fibonacci(int n) {if(n==1)return 1;if(n==2)return 1;return Fibonacci(n-1)+Fibonacci(n-2); }關于斐波那契數列:點擊這里
4.漢諾塔問題的遞歸實現
#include<stdio.h> void move(int n, char x, char y, char z)//將n個圓盤從x柱子上借助y柱子移動到z柱子上 {if(n == 1)printf("圓盤編號 %d :從 %c 移動到 %c\n",n,x,z);else{move(n-1,x,y,z);printf("圓盤編號 %d:從 %c 移動到 %c\n",n,x,z);move(n-1,y,x,z);}} int main() {int n;//n代表圓盤的個數/*A,B,C分別代表三個柱子*/char ch1 = 'A';char ch2 = 'B';char ch3 = 'C';printf("請輸入圓盤的個數:");scanf("%d",&n);move(n,ch1,ch2,ch3);return 0; }關于漢諾塔問題:點擊這里
【例題】
1.普通
同題:數的計數(信息學奧賽一本通-T1316):點擊這里
2.其他
同題:2的冪次方表示(信息學奧賽一本通-T1208):點擊這里
總結
以上是生活随笔為你收集整理的基础算法 —— 递归算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 放苹果(信息学奥赛一本通-T1222)
- 下一篇: 流感传染(信息学奥赛一本通-T1191)