遞迴演算法小結
阿新 • • 發佈:2020-11-23
1.遞迴演算法思想
遞迴即程式反覆呼叫自身。解決遞迴問題,關鍵是找到遞迴公式和邊界條件。
2.簡單示例
2.1使用遞迴公式求1+2+3+....+n的和。
#include <stdio.h> int getsum(int n) { if(n==1) { return 1; } return n+getsum(n-1); } int main() { printf("使用遞迴函式求1+..+100的和=%d",getsum(100)); return 0; }
執行結果:遞迴公式n+getsum(n-1),邊界條件是n==1,return 1;
2.2甲說比乙大2歲,乙說比丙大3歲,丙說比丁大1歲,丁說自己是18歲,求甲是多少歲?
#include <stdio.h> /*甲說比乙大2歲,乙說比丙大3歲,丙說比丁大1歲,丁說自己是18歲,求甲是多少歲?*/ /* 分3種情況討論,假設n=4是甲,n=3是乙,n=2是丙,n=1是丁 */ int getAge(int n) { if(n==1) { return 18; } if(n==2) { return getAge(1)+1; } if(n==3) {return getAge(2)+3; } if(n==4) { return getAge(3)+2; } } int main() { printf("甲的年齡為%d\n",getAge(4)); printf("乙的年齡為%d\n",getAge(3)); printf("丙的年齡為%d\n",getAge(2)); printf("丁的年齡為%d\n",getAge(1)); return 0; }
執行結果:
2.3列印斐波那契數列的前15項
#include <stdio.h> intFibonacci(int n) { if(n==1||n==2) { return 1; } return Fibonacci(n-1)+Fibonacci(n-2); } int main() { printf("求斐波那契數列的前15項:\n"); int i=1; for(i=1;i<=15;i++) { printf("(%d)=%d ",i,Fibonacci(i)); } return 0; }
執行結果:
參考文章:
https://www.cnblogs.com/protectione055/p/11828604.html
https://www.cnblogs.com/king-lps/p/10748535.html