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