『壹』 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));
}