函式的遞迴
例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 檔案和目錄路徑名的抽象表示形式 構造方法 ...