关于递归算法的几个例子(C语言)

1.递归算法的定义:

2.递归与迭代的优劣

eg1:斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

 1 /* 2     斐波那契数列 迭代实现        (打印出前40个) 3 */ 4 #include <stdio.h> 5 int main(){ 6     int i, arr[40]; 7     arr[0] = 0; 8     arr[1] = 1; 9     printf("%d %d ",arr[0],arr[1]);10     for(i=2; i<40; i++){11         arr[i] = arr[i-1] + arr[i-2];12         printf("%d ",arr[i]);13     }14     printf("\n");15 16     return 0;17 18 }
 1 /* 2     斐波那契数列 递归实现    (打印出前40个) 3 */ 4 #include <stdio.h> 5 /* 6 int fb(int n){ 7     if(n == 0){ 8         return 0; 9     }else if(n == 1){10         return 1;11     }else{12         return fb(n-1) + fb(n-2);13     }14 }15 */16 17 int fb(int n){18     if(n<2){19         return n == 0? 0:1;20     }else{21         return fb(n-1) + fb (n-2);22     }23     24 }25 26 27 int main(){28     int i;29     for(i=0; i<40; i++){30         printf("%d ",fb(i));31     }32     printf("\n");33     34     return 0;35 }

eg2:阶乘:亦即n!=1×2×3×…×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

 1 /* 2     递归实现阶乘 3     递归方式定义:0!=1,n!=(n-1)!×n。 4 */ 5  6 #include <stdio.h> 7 int fact(n){ 8     if(n == 0){ 9         return 1;10     }else{11         return fact(n-1) * n;12     }13 }14 15 int main(){16     int n = 5;17     printf("%d\n",fact(n));18     return 0;19 }

eg3:

 1 #include <stdio.h> 2 int print(){ 3     char a; 4     scanf("%c", &a); 5     if(a != '#'){ 6         print(); 7     } 8     if(a != '#'){ 9         printf("%c",a);10     }11     return 0;12 }13 int main(){14     print();15     printf("\n");16     return 0;17 }

解题思路:

eg4:二分法查找

 1 /* 2     二分法查找:迭代实现 3 */ 4 #include <stdio.h> 5 int main(){ 6     int arr[10] = {1,2,3,4,5,6,7,8,9,10}; 7     int input, low, high, mid; 8     low = 0; 9     high = 9;10     mid = (low + high) / 2;11     scanf("%d", &input);12 13     while(input != arr[mid]){14         if(input < arr[mid]){15             high = mid;16             mid = (low + high) / 2;17         }else{18             low = mid;19             mid = (low + high) / 2;20         }21     }22     printf("%d ",mid);/*输出要查找数字在数组中的下标*/23     return 0;24     25 }
 1 /* 2     二分法查找:递归实现 3 */ 4  5 #include <stdio.h> 6 int fun(int low, int high, int input, int arr[]){ 7     int mid; 8     mid = (low + high) /2; 9     if(arr[mid] == input){10         return mid;11     }else{12         if(input < arr[mid]){13             high = mid;14             return fun( low, high, input, arr);15         }else{16             low = mid;17             return fun( low, high, input, arr);18         }19     }20 21 }22 int main(){23     int arr[10] = {1,2,3,4,5,6,7,8,9,10};24     int input, low, high;25     low = 0;26     high = 9;27     scanf("%d", &input);28     printf("%d \n",fun(low, high, input, arr));/*输出要查找数字在数组中的下标*/29     return 0;30 }

没有人陪你走一辈子,所以你要适应孤独,

关于递归算法的几个例子(C语言)

相关文章:

你感兴趣的文章:

标签云: