# include <stdio.h>
int Sum(int n); //函數聲明
int main(void)
{
int n;
printf("請輸入n的值:");
scanf("%d", &n);
printf("sum = %d\n", Sum(n));
return 0;
}
int Sum(int n)
{
if (n <= 0)
{
return -1;
}
else if (1 == n)
{
return 1;
}
else
{
return n+Sum(n-1);
}
}
假設n爲5。調用函數sum(5)執行其中的代碼。
n=5
//n爲5時sum(5)執行到return n+Sum(n-1)時,無返回值
5+sum(4)
//放入棧後,此時再次調用自身sum(4),執行到return n+Sum(4-1),無返回值
4+sum(3)
//放入棧後,此時再次調用自身sum(3),執行到return n+Sum(3-1),無返回值
3+sum(2)
//放入棧後,此時再次調用自身sum(2),執行到return n+Sum(2-1),無返回值
2+sum(1)
/*放入棧後,此時再次調用自身sum(1),執行到else if (1 == n),返回值=1,
開始出棧,入棧出棧規則是先入後出,就像堆箱子,堆到頂後要從頂部開始取箱子最後才能拿到最底的箱子。
當前頂部的是2+sum1(1),所以返回值1返回到s+sum(1)即2+1=3,最頂層的返回值變爲3。
再次拿第二箱子3+sum(2)即3+3=6,返回值爲6。第三層箱子4+sum(3)即4+6=10,返回值爲10。
最低層箱子5+sum(4)即5+10=15。這時返回值15再次返回到主函數main中,打印出sum(n)的最終返回值15。
這就是1-5累加合的流程。
*/
下面是用遞歸求斐波那契數列(即數列中每一個數值都是其前兩個數值之和[0 1 1 2 3 5 8 13 21 34 55........])
# include <stdio.h>
long Fibonacci(int n); //函數聲明
int main(void)
{
int n;
printf("請輸入n的值:");
scanf("%d", &n);
printf("第n項的值爲:%ld\n", Fibonacci(n));
return 0;
}
long Fibonacci(int n)
{
if (n < 0)
{
return -1;
}
else if (0 == n)
{
return 0;
}
else if (1 == n)
{
return 1;
}
else
{
return Fibonacci(n-1)+Fibonacci(n-2);
}
}
這裏我們還假設n=5。[中括號爲當前返回值],{大括號爲2個返回值的和}。
n=5
Fibonacci(5-1){3}+Fibonacci(5-2){2}={5}最後返回5。
n=3
Fibonacci(3-1){1}+Fibonacci(3-2)[1]={2}
n=2 n=1返回值是[1] 最終返回值是{1}+[1]={2}
Fibonacci(2-1)[1]+Fibonacci(2-2)[0]={1}
n=1返回值是[1] n=0返回值是[0] 最終返回值是[1]+[0]={1}
n=4
Fibonacci(4-1){2}+Fibonacci(4-2){1}={3}
n=2
Fibonacci(2-1)[1]+Fibonacci(2-2)[0]={1}
n=1返回值是[1] n=0返回值是[0] 最終返回值是[1]+[0]={1}
n=3
Fibonacci(3-1){1}+Fibonacci(3-2)[1]={2}
n=1返回值是[1] 最終返回值是{1}+[1]={2}
n=2
Fibonacci(2-1)[1]+Fibonacci(2-2)[0]={1}
n=1返回值是[1] n=0返回值是[0] 最終返回值是[1]+[0]={1}