【C语言学习】函数递归调用

您所在的位置:网站首页 递归的方式求n 【C语言学习】函数递归调用

【C语言学习】函数递归调用

2023-05-19 00:57| 来源: 网络整理| 查看: 265

【C语言学习】函数递归调用 介绍1. 编写两个函数,分别求两个正整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个正整数由键盘输入。设有两个正整数m和n:2. 用递归方法编写求n!的函数f(int n),在主函数中输入两个整数m、n,然后调用函数求:作者留言 感谢观看!

介绍 本文是作者学习C语言的记录,初学上路,误撞勿怪。本文所有代码均已成功运行,如有错误,可能是编辑本文时误操作所致。本文所有代码仅为完成任务,漏洞颇多,输入数据时请规范输入。代码编译环境:Dev-C++,版本 5.11。 1. 编写两个函数,分别求两个正整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果,两个正整数由键盘输入。设有两个正整数m和n:

⑴ 实验五介绍了求最大公约数的算法,下面介绍用递归求m和n的最大公约数h的方法。设hcf(int m,int n)是用来求m和n的最大公约数h函数,k=m%n,则:

h = { h c f ( n , k ) ( k ! = 0 ) n ( k = = 0 ) h=\begin{cases} hcf(n,k) & (k!=0) \\ n & (k==0) \end{cases} h={hcf(n,k)n​(k!=0)(k==0)​

⑵ 若最大公约数为h,则最小公倍数l=m*n/h 。 实验时,完成以下两个函数的定义,使之和主程序构成完整的程序,实现题目的要求。

#include int hcf(int m,int n) /* 求最大公约数的函数 */ { …… } int lcd(int m,int n,int h) /* 求最小公倍数的函数 */ { …… } void main() { int m,n,h,l; printf("请输入两个正整数m、n:"); scanf("%d,%d",&m,&n); h=hcf(m,n); printf("%d和%d的最大公约数是:%d\n",m,n,h); l=lcd(m,n,h); printf("%d和%d的最小公倍数是:%d\n",m,n,l); }

程序调试通过后,用m=350、n=125和m=96、n=64两组数据运行程序,记录程序的输出。 代码如下:

#include int hcf(int m,int n) // 求最大公约数的函数 { int k; k=m%n; if(k!=0)return(hcf(n,k)); else if(k==0)return(n); } int lcd(int m,int n,int h) // 求最小公倍数的函数 { return(m*n/h); } void main() { int m,n,h,l; printf("请输入两个正整数m、n:"); scanf("%d,%d",&m,&n); h=hcf(m,n); printf("%d和%d的最大公约数是:%d\n",m,n,h); l=lcd(m,n,h); printf("%d和%d的最小公倍数是:%d\n",m,n,l); }

运行结果1(m=350,n=125): 运行结果 运行结果2(m=96、n=64): 运行结果

2. 用递归方法编写求n!的函数f(int n),在主函数中输入两个整数m、n,然后调用函数求:

公式图 代码如下:

#include long long f(int n); int main() { int m,n; long long result; printf("请输入m,n并保证m>=n:\n"); scanf("%d,%d",&m,&n); result=f(m)/(f(n)*f(m-n)); printf("%d!/(%d!*(%d-%d)!)=%d\n",m,n,m,n,result); return 0; } long long f(int n) { if(n==1||n==0)return(1); return(n*f(n-1)); }

运行结果: 运行结果

作者留言

由于时间仓促,本文没有代码注释和代码解说,后面会视情况补充。

感谢观看!


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3