zoukankan      html  css  js  c++  java
  • 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("
    ");
    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("
    ");
    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
    ",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("
    ");
    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 
    ",fun(low, high, input, arr));/*输出要查找数字在数组中的下标*/
    29     return 0;
    30 }
  • 相关阅读:
    Linux软件安装中RPM与YUM 区别和联系(转载)
    linux文件系统
    (转载) linux基础知识
    linux学习:硬盘挂载
    IDEA版github教程(转载)
    idea配置gitee(转载)
    事与人的关系
    maven打包失败与问题反思
    计算机开机
    maven到底干了啥
  • 原文地址:https://www.cnblogs.com/LinSL/p/7396484.html
Copyright © 2011-2022 走看看