算法小白又來啦~本博客僅用來學習過程中的記憶,寫的不好,大佬們勿噴..
遞歸定義:遞歸做爲一種算法在程序設計語言中廣泛應用.是指函數/過程/子程序在運行過程序中直接或間接調用自身的現象,這種程序調用自身的編程技巧稱爲遞歸(rercursion)
所以遞歸的思想是調用自身,那麼一個程序段或函數功能的設計就顯得尤爲重要,因爲畢竟內部還需要調用本身。
舉個栗子:
角谷定理。輸入一個自然數,若爲偶數,則把它除以2,若爲奇數,則把它乘以3加1。經過如此有限次運算後,總可以得到自然數值1。求經過多少次可得到自然數1。
如:輸入22
輸出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 1
代碼實現如下:
#include<stdio.h>
void Jg(int *count,int n);
int main(){
int count=0;
Jg(&count,22);
printf("%d",count);
}
void Jg(int *count,int n){
if(n!=1){
if(n%2==0){
n=n/2;
}
else{
n=n*3+1;
}
(*count)++;
Jg(count,n);
}
}
這個算法中的Jg算法即接受傳入count的地址和需要計算的初始值n以及中間生成的n;
在內部判斷完中間n之後在內部繼續調用;
所以~算法好難~好好學吧~skrskr