zoukankan      html  css  js  c++  java
  • 关于递归的几个小例子

    递归本质上还是一种函数的嵌套调用。

    底下是几个关于递归的一些常见应用的小例子。

    1.斐波那契数列,递归在递推上的应用。

    /*递推用递归来求解时,主要找最后一步怎么来求解和边界条件,即第一步*/

    1 int fibonacci(int n)
    2    {
    3        if(n==1||n==2)
    4            return 1;
    5        else
    6            return (n+fibonacci(n-1)+fibonacci(n-2));
    7    }

    2.十进制转二进制

     1 void convert(int n)
     2  {
     3      int m;
     4      if(n!=0)//当等于0时n为1或者0,直接输出 
     5      {
     6      
     7          convert(n/2);
     8          
     9          printf("%d",n%2);//输出放在递归调用之后,因为输出是反向的 
    10          
    11      }
    12      else
    13      printf("%d",n);
    14  }

    3.汉诺塔问题

     1 void hanoi(int n,char x,char y,char z)
     2 {
     3     /*第一次直接从x移到z
     4       第二次先从x移到y,再从x移到z,最后从y移到z
     5       第三次先将前两个借助z从x移到y,再将x移到z,在把y上的两个借助x移到z
     6       ......
     7       类推。    */
     8     if(n==1)
     9         printf("%c-->%c
    ",x,z);
    10     else
    11     {
    12         hanoi(n-1,x,z,y);
    13         printf("%c-->%c
    ",x,z);
    14         hanoi(n-1,y,x,z);
    15     }
    16 }

     4.从(0,0)到(m,n)走只能向上或者向右走,一次只能走一步有多少种走法 (利用递归把问题化为缩小了的同类问题的子问题)

     1 int fun(int m,int n)
     2 {
     3         if(m==0&&n==0)
     4         {
     5                 return 0;
     6         }
     7         else if(m==0||n==0)
     8                 return 1;
     9         else
    10                 return (fun(m-1,n)+fun(m,n-1));
    11 }
  • 相关阅读:
    curl上传图片文件
    手工制作简单后台模板
    首页自动生成静态化html
    svn-多个项目版本库和自动同步更新post-commit
    Snoopy+phpquery采集demo
    phpstorm使用手册
    mac系统使用帮助
    upupw一键绿色免安装环境包
    去掉文件夹的.svn文件
    centos安装svn服务器
  • 原文地址:https://www.cnblogs.com/zydark/p/7822033.html
Copyright © 2011-2022 走看看