递归函数及其应用

读书笔记

1、递归:是指函数直接或间接地调用函数本身

如:

复制代码
#include<stdio.h>
void print()
{
    printf("hello world");
    print();
}
int main()
{
    print();            //程序会重复的在屏幕上输出hello world
    return 0;
}
复制代码

程序设计中无条件的递归通常是无意义的,但如果给递归调用增加限制条件,可达成我们想要的效果

为了保证程序能在有限次递归调用后结束,应该定义好递归的出口条件

如:

复制代码
#include<stdio.h>
void print(int n)
{
    if (n>0)                //出口条件为n>0
    {
        printf("%d: \n",n);
     printf("hello world\n");
     print(n-1);
  }
}
int main()
{
  print(3);
  return 0;
}
复制代码

 使用递归策略实现算法问题的算法程序,其前提是必须使用划分技术,把需求解的问题划分成若干和原问题结构相同,但规模较小的子问题,

这样可以使原问题的解建立在子问题解的基础上,而子问题的解建立在更小的子问题解的基础上,由于问题的求解是从原问题开始的,因此其`

求解过程是自顶向下产生的计算序列

(1)用递归函数实现阶乘问题

复制代码
long fact(int n)
{
  if (n==0) return 1;
  else return n*fact(n-1);
}
int main()
{
  int n;
  long f;
  printf("Please input an integer : ");
  scanf("%d",&n);
  f = fact(n);
  pirntf("%d != %ld\n",n,f);
  retutn 0;
}

复制代码

 

(2)用递归函数解决汉诺塔问题

复制代码
#include<stdio.h>
void move (int n,char source,char goal);
void moveTower(int n,char source,char temp,cahr goal)
int main()
{
  int n;
  printf("Please enter the number of disks: ");
  scanf("%d",&n);
  printf("steps of moving %d disks from A to C by means of B:\n",n);
  moveTower(n,'A','B','C');
  return 0;
}
void move(int n,char source,char goal)
{                                      //盘片编号n,移动起点source,移动终点goal
  printf("move %d:from %c to %c\n",n,source,goal);
}
void moveTower(int n,char source,char temp,char goal)        //盘片编号n,移动起点source,临时中点temp,移动重点goal
{
  if (n==1)
    move(n,source,goal);                       //将第n个圆盘从source移动到goal
  else
  {
   moveTower(n-1,source,goal,temp);                  //将第n-1个圆盘借助goal从source移动到temp
   move(n,source,goal);                        //将第n个圆从source移动到goal
   moveTower(n-1,temp,source,goal);                 //将n-1个圆盘借助source从temp移动到goal
  }
}


复制代码

 

posted @   楸壳  阅读(520)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示