標籤:c語言 指標 遞迴
遞迴定義:
一個過程或函數在其定義或說明中有直接或間接調用自身的一種方法。
遞迴條件:
(1) 遞迴就是在過程或函數裡調用自身;
(2) 在使用遞迴策略時,必須有一個明確的遞迴結束條件,稱為遞迴出口。
利用遞迴可以使程式簡化,減少代碼的編寫,下面請看例子。
1.取得十進位數的每一位並以字元的形式輸出。
#include<stdio.h>
#include<stdlib.h>
void binary_to_ascii(unsigned int value)
{
int num = value % 10; //模10可得到十進位數的每一位
if (value> 9) //遞迴結束條件
binary_to_ascii(value / 10); //去掉最後一位,遞迴調用自身
printf("%c", num + ‘0‘); //加字元0的ascii碼值後得到對應字元
}
int main()
{
binary_to_ascii(1234);
system("pause");
return 0;
}
2.不使用臨時變數得到字串長度,利用遞迴函式
#include<stdio.h>
int my_strlen1(const char *str) //使用臨時變數的方式
{
int count = 0;
while (*str)
{
count++;
str++;
}
}
int my_strlen(char *str) //利用遞迴函式的方式
{
if (*str == ‘\0‘) //判斷字串是否為空白
return 0;
else
return 1 + my_strlen(str+1); //指向字串的指標加1傳回值就加1
} //注意:此處的str+1不可以用str++或++str替代
int main() //前者指標將會在自加之前一直指向同一個字元
{ //後者儘管可以實現指標向後 加1的目的,但是
char *p = "bit-tech"; //具有副作用,它會改變指標的內容
printf("%d\n", my_strlen(p));
system("pause");
return 0;
}
3.寫一個遞迴函式DigitSum(n),輸入一個非負整數,返回組成它的數字之和,例如,調用DigitSum(1729),則應該返回1+7+2+9,它的和是19
#include<stdio.h>
int DigitSum(int num){
int sum = 0;
int tmp = num % 10;
if (num > 0)
sum = tmp+DigitSum(num / 10);
return sum;
}
int main(){
int num = 0;
printf("請輸入一個非負整數\n");
scanf_s("%d", &num);
int ret = DigitSum(num);
printf("%d\n", ret);
return 0;
}
4.編寫一個函數實現n^k,使用遞迴實現
#include<stdio.h>
int calculate(int num, int k){
if (k == 0) //指數為0
return 1;
else //指數不為0
return num * calculate(num, k - 1);//計算k次冪,遞迴調用k-1次
}
int main(){
int num = 0;
int k = 0;
printf("請輸入想要計算的數和冪\n");
scanf_s("%d %d", &num, &k);
printf("%d\n", calculate(num, k));
return 0;
}
本文出自 “moLova” 部落格,請務必保留此出處http://molova.blog.51cto.com/10594266/1688240
C語言:遞迴小例子幾則