大一c語言遞歸求函數的例子,遞歸函數的例子C語言

本文目錄一覽:

在c語言中如何使用遞歸函數

遞歸,是函數實現的一個很重要的環節,很多程序中都或多或少的使用了遞歸函數。遞歸的意思就是函數自己調用自己本身,或者在自己函數調用的下級函數中調用自己。

遞歸之所以能實現,是因為函數的每個執行過程都在棧中有自己的形參和局部變數的拷貝,這些拷貝和函數的其他執行過程毫不相干。這種機制是當代大多數程序設計語言實現子程序結構的基礎,是使得遞歸成為可能。假定某個調用函數調用了一個被調用函數,再假定被調用函數又反過來調用了調用函數。這第二個調用就被稱為調用函數的遞歸,因為它發生在調用函數的當前執行過程運行完畢之前。而且,因為這個原先的調用函數、現在的被調用函數在棧中較低的位置有它獨立的一組參數和自變數,原先的參數和變數將不受影響,所以遞歸能正常工作。程序遍歷執行這些函數的過程就被稱為遞歸下降。

程序員需保證遞歸函數不會隨意改變靜態變數和全局變數的值,以避免在遞歸下降過程中的上層函數出錯。程序員還必須確保有一個終止條件來結束遞歸下降過程,並且返回到頂層。

c語言中,什麼是函數的遞歸,能舉個例子么

所謂遞歸,說的簡單點,就是函數自己調用自己,然後在某個特定條件下。結束這種自我調用。

如果不給予這個結束條件,就成了無限死循環了。這樣這個遞歸也就毫無意義了。

如下面問題

1 1 2 3 5 8 13 21 ……..n

分析可以看出, i 表示第幾個數, n 表示該數的值

當i = 1 時, n = 1;

當i = 2 時, n = 1;

當i = 3 時 n = i1 + i2;

當i = 4 時 n = i2 + i3

所以可以寫個函數

int fun(int n) // 這裡的n代表第幾個數

{

if(1 == n || 2 == n) // 第一個數

{

return 1;

}

else

{

return fun(n – 1) + fun(n – 2); // 這裡就是自己調用自己,形成循環自我調用。

}

}

註: 以上代碼只是用來演示遞歸,不包含錯誤校驗。

在實際生產過程中。該代碼不夠健壯。

如此,就完成了遞歸。你就可以求得第n個數了。

何時考慮使用遞歸。

當你分析一個問題的時候,發現這個問題,是一個自我循環時,而且這個自我循環到一個給定值,就可以終止的時候,你就快要考慮遞歸了。

C語言中自我遞歸的幾個例子

遞歸主要元素:入口,遞歸和結束。在定義遞歸函數時將這三個元素考慮進去就行;如: double callnext(int n)

{

if(n1) 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(n1) 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語言 函數遞歸調用的簡單例子

舉一個用遞歸調用函數求輸入非負整數的階乘的例子,如下:

//#include “stdafx.h”//If the vc++6.0, with this line.

#include “stdio.h”

int fact(int n){

    if(n==1 || n==0) return 1;

    else return n*fact(n-1);

}

int main(void){

    int x;

    while(1){

        printf(“Input x(int 12=x=0)…\nx=”);

        if(scanf(“%d”,x),x=0  x=12)//x12時會使結果溢出

            break;

        printf(“Error,redo: “);

    }

    printf(“%d! = %d\n”,x,fact(x));

    return 0;

}

c語言中的遞歸函數

先看看下面的例子:

void fun(int i)

{

if (i0)

{

fun(i/2);

}

printf(“%d\n”,i);

}

intmain()

{

fun(10);

return 0;

} 展開後如下:好理解了吧void fun(int i)

{

if (i0)

{

//fun(i/2);

if(i/20)

{

if(i/40)

{

}

printf(“%d\n”,i/4);

}

printf(“%d\n”,i/2);

}

printf(“%d\n”,i);

}

這樣一展開,是不是清晰多了

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/279462.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-20 15:04
下一篇 2024-12-20 15:04

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29

發表回復

登錄後才能評論