您好,登錄后才能下訂單哦!
今天來總結(jié)一下關(guān)于遞歸函數(shù)的使用方面的問題。
遞歸函數(shù)就是在函數(shù)使用的時(shí)候自己調(diào)用自己,層層調(diào)用,來實(shí)現(xiàn)你想要的功能。
有兩個最常用的例子,我們來寫一下。
(1)計(jì)算階乘
#include <stdio.h>
int factorial(int n); // 函數(shù)聲明(階乘)
int main(void)
{
int a = 5;
printf("%d的階乘是:%d.\n", a, factorial(a));
return 0;
}
int factorial(int n)
{
if (n < 1)
{
printf("error.\n");
return -1;
}
if (n == 1)
{
return 1;
}
else
{
return (n * factorial(n-1));
}
}
(2)斐波那契函數(shù)
#include <stdio.h>
int fibonacci(int n); // 函數(shù)聲明(斐波那契函數(shù))
int fibonacci(int n)
{
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main(void)
{
int a;
printf("%d的斐波那契函數(shù)值為%d",a,fibonacci(a));
return 0;
}
第二個可能不太容易看明白,我們來分析一下
首先,這個假設(shè)一個數(shù)為n ,
第一次遞歸,f(n)=f(n-1)+f(n-2)
第二次遞歸分為兩個部分,
f(n-1)=f(n-2)+f(n-3) f(n-2)=f(n-3)+f(n-4)
第三次遞歸分為四個部分……一直遞歸到0和1為止。
所以n==0或者n==1的時(shí)候返回一個常數(shù)很重要,要不然就會一直遞歸下去,直到觸發(fā)段錯誤。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。