‘壹’ c语言题目 递归计算两个正整数的最大公约数
#include<stdio.h>
void swap(int *m,int *n){
int t;
if(m < n){
t = n;
n = m;
m = t;
}
}
int f(int m,int n){
if(m%n == 0)return n;
else
return f(n,m%n);
}
int main(){
int p = 0,m = 0,n = 0;
printf("请按照由大到小的顺序输入两个整数,用空格隔开:\n");
scanf("%d%d",&m,&n);
swap(m,n);
p = f(m,n);
printf("两个数的最大公约数是:%d\n",p);
return 0;
}
‘贰’ 递归实现计算 c语言
int rec(int x,int n)
{
if(n==0)
return 1;
else
return rec(x,n-1)*x;
}
int main()
{
int x,n;
printf("请输入x和n\n");
scanf("%d%d",&x,&n);
printf("结果是:%d\n",rec(x,n));
}
‘叁’ C语言求一些关于递归的练习题
1、编写递归函数求 1+2+3+……+n 的和;
2、编写递归函数求 2*4*6*……*(2n) 的积;
3、编写递归函数求 n 的阶乘;
4、汉诺塔问题;
实际上很多问题都可以通过递归来实现,但是看到你的情况估计较难的你实现不了,所以给你几个简单的练习一下,这样可以增强对递归的理解,等理解的较为深入后再做稍微难一些的。
‘肆’ C语言递归练习
#include <stdio.h>
unsigned long func(unsigned long n)
{
if(n>1)
return n*func(n-1);
return 1UL;
}
int main()
{
unsigned long n;
scanf("%lu",&n);
printf("%lu ",func(n));
return 0;
}
‘伍’ C语言递归函数题
这个是递归函数:
recursion(int x,int y)
{
if(y-1 == x)return x;
else return x+recursion(x+1);
}
使用的时候用另个函数调用。
‘陆’ [C语言]用递归算法编写一个程序求Fibonacci数列的第n项值
代码:
#include<iostream>
#include<vector>
using namespace std;
vector<int>a,b,c;
void jisuan(int n){
if(n<=1)cout<<1<<endl;
else{
a.push_back(1);
b.push_back(1);
for(int i=2;i<=n;++i){
c=b;//存一下b的值
for(int j=b.size()-1,k=a.size()-1;k>=0;k--,j--){
b[j]+=a[k];
if(b[j]>=10){
if(k==0&&j==0){
b.insert(b.begin(),1);
j++;//插入之后需要%10的那个数往后移动一位
}
else{
b[j-1]++;//如果b前面还有数,前一个数+1
}
b[j]%=10;//把数%10,变成小于10的数因为前面已经进位
}
}
a=c;
}
for(int i=0;i<b.size();i++){
cout<<b<i>;
}
cout<<endl;
}
}
int main(){
int n;
cin>>n;
jisuan(n);
return 0;
}
(6)递归计算的c语言例题扩展阅读:
在做c/c++编程的对#include指令都不会陌生,绝大多数人也都知道如何使用,相信仍有人对此是一知半解的,
C:
#include<stdio.h>
C++:
#include<iostream>
表示包含C/C++标准输入输出头文件。包含指令不仅仅限于.h头文件,可以包含任何编译器能识别的C/C++代码文件,包括.c、.hpp、.cpp、.hxx、.cxx等,甚至.txt、.abc等等都可以。
预处理器发现#include指令后,就会寻找指令后面<>中的文件名,并把这个文件的内容包含到当前文件中。被包含文件中的文本将替换源代码文件中的#include指令,就像你把被包含文件中的全部内容键入到源文件中的这个位置一样。
‘柒’ c语言递归算法
用递归法计算n!
用递归法计算n!可用下述公式表示:
n!=1 (n=0,1)
n×(n-1)! (n>1)
按公式可编程如下:
long ff(int n)
{
long f;
if(n<0) printf("n<0,input error");
else if(n==0||n==1) f=1;
else f=ff(n-1)*n;
return(f);
}
main()
{
int n;
long y;
printf("\ninput a inteager number:\n");
scanf("%d",&n);
y=ff(n);
printf("%d!=%ld",n,y);
}
程序中给出的函数ff是一个递归函数。主函数调用ff 后即进入函数ff执行,如果n<0,n==0或n=1时都将结束函数的执行,否则就递归调用ff函数自身。由于每次递归调用的实参为n-1,即把n-1的值赋予形参n,最后当n-1的值为1时再作递归调用,形参n的值也为1,将使递归终止。然后可逐层退回。
下面我们再举例说明该过程。设执行本程序时输入为5,即求5!。在主函数中的调用语句即为y=ff(5),进入ff函数后,由于n=5,不等于0或1,故应执行f=ff(n-1)*n,即f=ff(5-1)*5。该语句对ff作递归调用即ff(4)。
进行四次递归调用后,ff函数形参取得的值变为1,故不再继续递归调用而开始逐层返回主调函数。ff(1)的函数返回值为1,ff(2)的返回值为1*2=2,ff(3)的返回值为2*3=6,ff(4)的返回值为6*4=24,最后返回值ff(5)为24*5=120。
‘捌’ C语言!跪求使用递归法的例题(带答案的)
汉诺塔算法, 一个柱子1上n个盘子套着,大的在下,借用柱子2,全部转移到柱子3上
#include <stdio.h>
int main()
{
void hanoi(int n,char one,char two,char three); // 对hanoi函数的声明
int m;
printf("input the number of diskes:");
scanf("%d",&m);
printf("The step to move %d diskes:\n",m);
hanoi(m,'A','B','C');
}
void hanoi(int n,char one,char two,char three) // 定义hanoi函数
// 将n个盘从one座借助two座,移到three座
{
void move(char x,char y); // 对move函数的声明
if(n==1)
move(one,three);
else
{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}
void move(char x,char y) // 定义move函数
{
printf("%c-->%c\n",x,y);
}
在hanoi调用hanoi就是递归了
‘玖’ 一道C语言的题目,递归法
#include<stdio.h>
#include<math.h>
/*求n的阶乘,递归,分母部分
* 结束条件为:1的阶乘=1
* 递归时,一定要有结束条件
*/
int factorial(n)
{
if(n==1) //递归结束条件,1的阶乘为1
return 1;
else
return n*factorial(n-1); //n的阶乘为n乘以(n-1)!
}
int main()
{
int n,x;
size_t i; //i为无符号整数
double re=0;
printf("input n and x:");
scanf("%d%d",&n,&x); //输入n和x的值
for(i=1;i<=2*n-1;i+=2)
{
/*pow函数求的是x的i次方,分母为i的阶乘。本部分可以优化,因为i的阶乘算出来了,所以i+2的阶乘就是i的阶乘*(i+1)*(i+2),不用重复来计算阶乘。自己可以试试*/
re += pow(x,i)/factorial(i);
}
printf("\nn=%d\tx=%d\tresult=%f\n",n,x,re);//打印出最后的结果
return 0;
}
‘拾’ 用C语言递归算法,求第50项的值,题如图,写出程序,谢谢啦
#include<stdio.h>
int f(int a){
if(a==0){
return 0;
}else if (a==1) {
return 1;
}else if(a==2){
return 3;
}else{
return 2*f(a-1)-f(a-2);
}
}
void main(){
pritnf("%d",f(50));
}