函数不能嵌套定义,但能嵌套调用(在调用一个函数的过程中再调用另一个函数)

函数间接或直接调用自己,称为递归调用

 汉诺塔问题

思想:简化为较为简单的问题 n=2

较为复杂的问题,采用数学归纳方法分析

递归什么时候终止:只剩一个圆盘的情况    A--到--B

费波纳茨数列

根据最大公约数的如下3条性质,采用递归法编写计算最大公约数的函数Gcd(),在主函数中调用该函数计算并输出从键盘任意输入的两正整数最大公约数
性质1  如果a>b,则a和b与a-b和b的最大公约数相同,即Gcd(a, b) = Gcd(a-b, b)
性质2  如果b>a,则a和b与a和b-a的最大公约数相同,即Gcd(a, b) = Gcd(a, b-a)
性质3  如果a=b,则a和b的最大公约数与a值和b值相同,即Gcd(a, b) = a = b

  1. #include <stdio.h>
  2. int Gcd(int a, int b);
  3. int main()
  4. {
  5. int a, b, c;
  6. printf("Input a,b:");
  7. scanf("%d,%d", &a, &b);
  8. c = Gcd(a, b);
  9. if (c!=-)
  10. printf("Greatest Common Divisor of %d and %d is %d\n", a, b, c);
  11. else
  12. printf("Input number should be positive!\n");
  13.  
  14. getchar();
  15. getchar();
  16. return ;
  17. }
  18.  
  19. int Gcd(int a, int b)
  20. {
  21. if (a<=||b<=)
  22. return -;
  23. if (a == b)
  24. return a;
  25. else if (a > b)
  26. return Gcd(a-b, b);
  27. else
  28. return Gcd(a, b-a);
  29. }

C语言 递归 汉诺塔问题 最大公约数问题的更多相关文章

  1. 用C语言实现汉诺塔自动递归演示程序

    用C语言实现汉诺塔自动递归演示程序 程序实现效果 1.变界面大小依照输入递归数改变. 2.汉诺塔自动移动演示. 3.采用gotoxy实现流畅刷新. 4.保留文字显示递归流程 程序展示及实现 githu ...

  2. 关于C语言解决汉诺塔(hanoi)问题

    C语言解决汉诺塔问题 汉诺塔是典型的递归调用问题: hanoi简介:印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了由大到小的64片金片,这就是所谓的汉诺塔.不论白天黑夜,总有一个僧侣 ...

  3. 递归:汉诺塔 - 零基础入门学习Python024

    递归:汉诺塔 让编程改变世界 Change the world by program 似乎谈到递归算法就要拿汉诺塔来举例,没办法,因为小甲鱼小时候太笨了,这个游戏老是玩不过关,好不容易在自学编程的时候 ...

  4. 【C语言】汉诺塔问题

    之前遇见这个问题,非常费劲地理解了,并写出代码,然后过段时间,再遇见这个问题,又卡住了,如此反反复复两三次,才发现自己对递归的理解依然很肤浅.今天无聊,重温<算法:c语言实现>一书,又遇见 ...

  5. python递归——汉诺塔

    汉诺塔的传说 法国数学家爱德华·卢卡斯曾编写过一个印度的古老传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度教的主神梵天在创造世界的时候,在其中一根针上从下到上地穿好了 ...

  6. 【Python学习之七】递归——汉诺塔问题的算法理解

    汉诺塔问题 汉诺塔的移动可以用递归函数非常简单地实现.请编写move(n, a, b, c)函数,它接收参数n,表示3个柱子A.B.C中第1个柱子A的盘子数量,然后打印出把所有盘子从A借助B移动到C的 ...

  7. js 递归 汉诺塔的例子

    程序调用自身的编程技巧称为递归. //汉诺塔的游戏,n为圆盘编号数量,编号,a,b,c代表的是三个柱子 var hanio=function(n,a,b,c){     if(n>0){    ...

  8. python 递归-汉诺塔

    # 汉诺塔 a = "A" b = "B" c = "C" def hano(a, b, c, n): if n == 1: print(& ...

  9. C语言实现汉诺塔

    汉诺塔 要把A柱子上的盘子移动到C柱子上,在移动过程中可以借助B柱子,但是要求小的盘子在上大的盘子在下. 解题思路: 1.把A柱子上的前N-1个盘子借助C柱子,全部移动到B柱子上(过程暂不考虑),再把 ...

随机推荐

  1. python 字符串的方法

    capitalize() 把字符串的第一个字符改为大写 casefold() 把整个字符串的所有字符改为小写 center(width) 将字符串居中,并使用空格填充至长度 width 的新字符串 c ...

  2. api-gateway实践(15)3.6JL分支和3.7并行改造需求

    一.名称改为"API网关" --哪个地方的名称?二.开发者视图中,API网关显示两个视图. 1. 服务分类视图:支持按照业务分为多个类别,分类方式参照应用服务化的分类:人像比对.自 ...

  3. C#的扩展方法简介

    顾名思义,这是一种可以扩展C#类的操作,MSDN上的说法是: "扩展方法使您能够向现有类型"添加"方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型.&quo ...

  4. Menu-右键弹出菜单

    #右键弹出菜单 from tkinter import * root=Tk() def callback(): print('我被调用了') menubar =Menu(root) menubar.a ...

  5. node.js使用node-xlsx读写数据

    下面是包含了读写的样例: var xlsx = require('node-xlsx'); var fs = require('fs'); // 读取文件内容 var data = xlsx.pars ...

  6. reportng优化

    本来呢,我是看到报告中没有输出@Test的description 的属性,想优化一下,没想到在找reportng的源码的时候,发现一个大神也优化了reportNG,他优化了下面几个内容: 1).测试结 ...

  7. Java内存回收机制.md

    1.java的内存 java的内存结构分为 堆 (是gc的主要区域) 线程共享,主要是用于分配实例对象和数组 栈 线程私有,它的生命周期和线程相同,又分成 虚拟机栈和本地方法栈,只有它会报 Stack ...

  8. Python3.5调用Java的jar包

    声明:这个是在一个博客上看到的,过了俩星期了突然找不到原博客了,如果原来的博主看到,请联系我删除~ 主要是怕自己忘记,所以在此记录: 环境 Python3.5+JDK1.8 安装命令:python3 ...

  9. [LeetCode] Construct String from Binary Tree 根据二叉树创建字符串

    You need to construct a string consists of parenthesis and integers from a binary tree with the preo ...

  10. Lintcode388 Permutation Sequence solution 题解

    [题目描述] Given n and k, return the k-th permutation sequence. Notice:n will be between 1 and 9 inclusi ...