首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 一段c++的小代码 [已结帖,结帖人:chenShuyuNO1]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenShuyuNO1
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-11-06 16:50:51 楼主
    #include <iostream>
    using namespace std;
    int fun(int x,int y)
    {
    int k;
    if(x <y)
    {
      k=x;
      x=y;
      y=k;
    }
    if(x%y==0)
      return (y);
    else
      return fun(y,x%y);
    }
    void main()
    {
      int x,y,z,t;
      cout < <"请输入x=" < <endl;
      cin>>x;
      cout < <"请输入y=" < <endl;
      cin>>y;
      z=fun(x,y);
      t=(x*y)/z;
      cout < <x < <"与" < <y < <"的最小公倍数为:" < <t < <endl;
      cout < <x < <"与" < <y < <"的最大公约数为:" < <z < <endl;
    }

    其中return fun(y,x%y); 是什么意思?
    z=fun(x,y); 我知道是函数调用,但是为啥子调用出来就是最大公约数的值呢?急阿
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anglecloudy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:54:031楼 得分:5
    C/C++ code
    int fun(int x,int y) { int k; if(x <y) { k=x; x=y; y=k; } if(x%y==0) return (y); else return fun(y,x%y); //递归调用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cyj626
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:54:542楼 得分:0
    递归啊
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • redleaves
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:56:483楼 得分:0
    辗转相除法...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • anglecloudy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:57:154楼 得分:0
    举个例子吧
    X=15 Y=12
    fun(15,12)=fun(12,3)=3
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • liuhaoran
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-06 16:57:545楼 得分:15
    求这个最大公约数是根据:
    欧几里德算法

    欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:

    定理:gcd(a,b) = gcd(b,a mod b)

    证明:a可以表示成a = kb + r,则r = a mod b
    假设d是a,b的一个公约数,则有
    d|a, d|b,而r = a - kb,因此d|r
    因此d是(b,a mod b)的公约数

    假设d 是(b,a mod b)的公约数,则
    d | b , d |r ,但是a = kb +r
    因此d也是(a,b)的公约数

    因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证

    欧几里德算法就是根据这个原理来做的.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xinxx2003
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 10:47:246楼 得分:0
    递归函数。。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bxhzct
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 10:52:357楼 得分:0
    函数的递归调用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chenShuyuNO1
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 11:49:428楼 得分:0
    多谢一楼和5楼的解释哈。很感激!!!!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • elovenana
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-11-07 13:18:409楼 得分:0
    int fun(int x,int y)
    {
    int k;
    if(x <y)
    {
      k=x;
      x=y;
      y=k;
    }
    if(x%y==0)
      return (y);
    else
      return fun(y,x%y);
    }
    利用的最大公约数的算法,还有多几种,你到网上搜搜;
    return fun(y,x%y);

    看这个例子:
    int a(n)
    {
      return n>0?a(n-1):0;
    }
    就是函数调用函数,只不过是,自己调用的自己而已;
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved