c語言遞歸函數的例子
① c語言中的遞歸函數
當需要返回值時就return.程序因此不死循環。正不正確,運行一下通過就應該ok.
② c語言類函數遞歸調用的簡單例子有哪些
=#include <stdio.h>
/// 求階乘函數
/// 遞歸思想
/// n! = n * (n-1) * (n-2) * ... * 1
/// n! = n * [(n-1) * (n-2) * ... * 1]
/// n! = n * (n-1)! 遞歸方程
/// 這是遞歸實現
unsigned Factorial(unsigned int n)
{
if (n == 0) return 1; // 對於0的階乘,當n=0時,遞歸返回
return n * Factorial(n-1); // 遞歸調用
}
void main()
{
int n = 3;
printf("3! = %d",Factorial(n));
}
③ 講一下c語言中遞歸函數的使用方法
相當於循環,要有判斷條件,傳遞進去的參數要變化,滿足條件調用自身,不滿足條件就開始一層一層返回。簡單例子:
int
f(int
i){
int
sum=0;
if(i>0)
sum+=f(i-1);
return
sum;
}
main(){
int
a=10;
printf("%d",f(a));
}
④ c語言 函數遞歸調用的簡單例子
舉一個用遞歸調用函數求輸入非負整數的階乘的例子,如下:
//#include"stdafx.h"//Ifthevc++6.0,withthisline.
#include"stdio.h"
intfact(intn){
if(n==1||n==0)return1;
elsereturnn*fact(n-1);
}
intmain(void){
intx;
while(1){
printf("Inputx(int12>=x>=0)... x=");
if(scanf("%d",&x),x>=0&&x<=12)//x>12時會使結果溢出
break;
printf("Error,redo:");
}
printf("%d!=%d ",x,fact(x));
return0;
}
⑤ C語言中自我遞歸的幾個例子
遞歸主要元素:入口,遞歸和結束。在定義遞歸函數時將這三個元素考慮進去就行;如: double callnext(int n)
{
if(n>1) return callnext(n-1)+3;
else return 1;
}
int main()
{
int m;
scanf("%d",&m);
printf("result=%f",callnext(m));
return 0;
}
入口:callnext(m);遞歸:if(n>1) return callnext(n-1)+3中的callnext(n-1);結束:else return 1;整個執行流程:callnext(m) 調用 callnext(m-1);callnext(m-1)調用callnext(m-1-1)。。。
callnext(2)調用callnext(1);callnext(1)=1;結束;
⑥ 遞歸函數的例子
這個行嗎:
求1+2+……+100的和
先分析一下。第一遞歸變數的問題,從題目上看應該取1,2,……,100這些變數的值作為遞歸的條件;第二就是如何終止的問題,從題目上看應該是當數為100的時候就不能往下加了。那麼我們試著寫一下程序。
int add(int);
main()
{
int num=1,sn;
sn=add(num);
printf("%d\n",sn);
getch();
}
int add(int num)
{
static int sn;
sn+=num;
if(num==100) return sn;
add(++num);
}
分析一下程序:前調用add(1),然後在子函數中把這個1加到sn上面。接著調用add(2),再把sn加2上來。這樣一直到100,到了100的時候,先加上來,然後發現滿足了if條件,這時返回sn的值,也就是1+2+……+100的值了。
⑦ c語言中,什麼是函數的遞歸,能舉個例子么
(PS:因為很多IT術語的定義都來源於國外,我們看的中文大部分是別人看了國外的文獻然後以他的中文素養加以解釋的!但是中華語言博大精深!而英語就較為簡單了,記得上次看高德納的《surreal number》時候,文中有一句「the beginning of the world」,而作者譯為「萬物初始」,從這里就可見一斑了!所以,對於一些不是很明白的IT術語,可以去看一下英文翻譯,可能會對你有幫助)遞歸的英文是recursion,有循環的意思。
能夠形成函數遞歸,該函數要有兩個屬性:
1.A simple base case (or cases), and
2.A set of rules which rece all other cases toward the base case.
For example, the following is a recursive definition of a person's ancestors:
One's parents are one's ancestors (base case).
The parents of one's ancestors are also one's ancestors (recursion step).
The Fibonacci sequence is a classic example of recursion:
Fib(0) is 0 [base case]
Fib(1) is 1 [base case]
For all integers n > 1: Fib(n) is (Fib(n-1) + Fib(n-2)) [recursive definition]
樓上的同志將遞歸的定義解釋得已經很清楚了,但是你想要真正了解什麼是函數遞歸,最好先了解什麼是遞歸!然後對於函數遞歸就豁然開朗了!
⑧ c語言函數的遞歸調用
遞歸必須滿足兩個條件:1.初始條件;2.遞歸函數.舉個例子,求階乘:有f(1)=1;f(n)=n*f(n-1)(n≥2)現在你可以實現如下:long func(int n)//定義函數
{
long f,s=0;
if(n==1)f=1;
else
{
f=func(n-1)*n; //這里就是一個遞歸的過程,自身調用自身
s=s+f;
}
return s;
} 假設你現在是求3!執行過程就是:f(3)=f(2)*3;然後調用自身:f(2)=f(1)*2;在調用遇到初始條件:f(1)=1;則f(3)=1*2*3=6
⑨ 求C語言遞歸比迭代好的例子
漢諾塔問題,不用遞歸的話 還真的挺難
⑩ c語言遞歸函數
遞歸函數:
編程語言中,函數Func(Type a,……)直接或間接調用函數本身,則該函數稱為遞歸函數。遞歸函數不能定義為內聯函數。
在數學上,關於遞歸函數的定義如下:對於某一函數f(x),其定義域是集合A,那麼若對於A集合中的某一個值X0,其函數值f(x0)由f(f(x0))決定,那麼就稱f(x)為遞歸函數。
函數介紹:
在數理邏輯和計算機科學中,遞歸函數或μ-遞歸函數是一類從自然數到自然數的函數,它是在某種直覺意義上是"可計算的" 。事實上,在可計算性理論中證明了遞歸函數精確的是圖靈機的可計算函數。遞歸函數有關於原始遞歸函數,並且它們的歸納定義(見下)建造在原始遞歸函數之上。但是,不是所有遞歸函數都是原始遞歸函數 — 最著名的這種函數是阿克曼函數。
其他等價的函數類是λ-遞歸函數和馬爾可夫演算法可計算的函數。
例子:
//代碼1
void func()
{
//...
if(...)
func();
else
//...
}
條件:
一個含直接或間接調用本函數語句的函數被稱之為遞歸函數,在上面的例子中能夠看出,它必須滿足以下兩個條件:
1) 在每一次調用自己時,必須是(在某種意義上)更接近於解;
2) 必須有一個終止處理或計算的准則。
梵塔的遞歸函數:
//C
void hanoi(int n,char x,char y,char z)
{
if(n==1)
move(x,1,z);
else
{
hanoi(n-1,x,z,y);
move(x,n,z);
hanoi(n-1,y,x,z);
}
}