函式遞迴總結

2021-10-02 10:47:58 字數 3915 閱讀 3756

函式的遞迴

例1.接收乙個整型值,並且按順序列印他的每一位.(例如:輸入:1234.輸出:1 2 3 4)

#include

#include

void

print

(int num)

printf

("%d\n"

, num %10)

;}intmain()

執行結果:

例2.求字串的長度

法1.利用strlen函式直接求

#include

#include

#include

intmain()

法2.利用函式的形式進行求解

#include

#include

#include

//"abcd"

intstrlen

(char arr)

return i;

}int

main()

法3.遞迴

#include

#include

#include

//"abcd"

intstrlen

(char arr)

return1+

strlen

(arr+1)

;//指標+1等於跳過乙個元素指向下乙個字元

}int

main()

執行結果:總結:關於求解字串的總結:法1是直接利用strlen函式進行求解.法2是利用函式的形式引入參量進行計算.

法3是利用遞迴的的方法進行呼叫求解.一定要理解遞迴的方式

字串是一種特殊的字元陣列,必須以\0結尾.計算其長度時遇到\0就結束.長度不算\0

字元陣列長度:(佔記憶體的位元組數)長度計算必須要算上\0.

例3.求n的階乘

法1.直接法

#define _crt_secure_no_warnings

#include

#include

intmain()

printf

("%d \n"

,ret)

;system

("pause");

return0;

}

法2.函式的呼叫

#define _crt_secure_no_warnings

#include

#include

#include

void

factor

(int n)

printf

("%d\n"

,ret);}

intmain()

利用函式呼叫,當結束的時候重新回到到呼叫位置的下一行開始執行法3.遞迴實現

#define _crt_secure_no_warnings

#include

#include

#include

intfactor

(int n)

return n*

factor

(n -1)

;}intmain()

函式遞迴就是把問題進行拆分,然後遞迴進行求解.執行結果:

例4.斐波那契數(生兔子)

1 1 2 3 5 8 13 21 …()始終滿足前兩項之和等於第三項

法1.遞迴(函式呼叫)計算方法比遞迴快很多避免了重複計算

#include

#include

intfib

(int n)

if(n >=3)

return cur;}}

intmain()

法2.遞迴

#include

#include

#include

intfib

(int n)

return

fib(n -1)

+fib

(n -2)

;}intmain()

執行結果:遞迴總結:函式遞迴就是把問題進行拆分,然後遞迴進行求解.

遞迴:程式呼叫自身的程式設計技巧.遞迴的兩個必要條件.

1.存在限制條件,當滿足這個限制條件的時候,遞迴將不再繼續進行下去.

2.每次遞迴呼叫之後越來越接近這個限制條件.(收斂)

例5.青蛙跳台階問題

乙隻青蛙一次可以跳上1級台階,也可以跳上2級。求該青蛙跳上乙個n級的台階總共有多少種跳法(先後次序不同算不同的結果)。

思路:列出一共跳的可能性,找到對應的規律

列出部分情況:

如果n = 1,只有一種跳法,那就是1

如果n = 2,那麼有兩種跳法,2,[1, 1]

如果n = 3,那麼有三種跳法,[1, 1, 1], , [1, 2], [2, 1]

如果n = 4,那麼有五種跳法,[1, 1, 1, 1], [1, 1, 2], [1, 2, 1], [2, 1, 1], [2, 2]

如果n = 5,那麼有八種跳法,[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 2, 1], [1, 2, 1, 1], [2, 1, 1, 1], [2, 2, 1], [2, 1, 2], [1, 2, 2]

由規律可以很明顯的看到:當前跳的總數始終等於前一項和前兩項之和

法1.遞迴

#include

#include

intjump

(int n)

if(n ==2)

return

jump

(n-1)+

jump

(n-2);

}int

main()

執行結果:法2.非遞迴

#include

#include

intjump

(int num)

if(num ==2)

for(

int i =

3; i <= num;i++

)return cur;

}int

main()

執行結果:

函式的遞迴總結

函式的遞迴總結 概念 程式呼叫自身的程式設計技巧稱為遞迴 思考方式 在於在於將大事化小 遞迴的兩個條件 1.有限制條件,當滿足這個限制條件時,遞迴便不再進行。2.每次遞迴呼叫後越來越接近限制條件,讓程式得以執行結束。使用遞迴必須要明白 1.明確這個函式要完成那些東西。2.尋找遞迴要結束的條件。3.找...

學習遞迴(總結)

學習遞迴 總結 遞迴是設計和描述演算法的一種有力的工具,由於它在複雜演算法的描述中被經常採用,為此在進一步介紹其他演算法設計方法之前先討論它。能採用遞迴描述的演算法通常有這樣的特徵 為求解規模為n的問題,設法將它分解成規模較小的問題,然後從這些小問題的解方便地構造出大問題的解,並且這些規模較小的問題...

JAVA Fiel 遞迴 總結

遞迴 方法定義中呼叫方法本身的現象 直接遞迴 public void methoda 間接遞迴 public void metohdb public void methodc 遞迴注意實現 要有出口,否則就是死遞迴 次數不能太多,否則就記憶體溢位 file 檔案和目錄路徑名的抽象表示形式 構造方法 ...