C語言day05-10遞歸練習02

pragma mark 遞歸練習02

pragma mark 概念

/**
 *  階乘公式 
    n! = n * (n-1)! ;
 */

pragma mark 代碼

#include <stdio.h>
int factorial(int n);
int main()
{
    // 用遞歸法求N的階乘
    /*
     ! 階乘
     4! == 4 * 3 * 2 * 1
     4! == 4 * 3!                    3! = 3 * 2 * 1
     4! == 4 * 3 * 2!                2! = 2 * 1
     4! == 4 * 3 * 2 * 1!            1! = 1
     
     4! == 4 * 3 * 2 * 1
     4! == 4 * 3!
     3! == 3 * 2!
     2! == 2 * 1!
     1! == 1
     n! = n * (n - 1)!;
     
     */
    
    int a = 3;
    int result = factorial(a);
    printf("result = %i\n",result);
    return 0;
}


int factorial(int n)    // 3 2 1
{
    // 結束條件
//    int result = 1;
    if (n == 1) {
        // 1 返回到公式 2 * factorial(2-1) 里面
        return 1;
    }
    else
    {
//      return 3 * factorial(3-1); == return 3 * 2; // 最后將結果返回到最開始調用的地方
//      return 2 * factorial(2-1); == return 2 * 1;
        
        
        return n * factorial(n - 1);
    }
}

pragma mark 遞歸練習03

pragma mark 概念

pragma mark 代碼

#include <stdio.h>
int age(int n);
int main()
{
    /*
     有5個人坐在一起,問第5個人多少歲?
     他說比第四個人大兩歲。問 第4個人歲數,他說比第三個人大兩歲,問第3個人,又說比第2個人大兩歲。問第2個人,就說比第1個人。最后問第1個人,他說10歲。請問第5個人多大?
     
     第一個人得歲數 == 10
     第二個人的歲數 == 第一個人 + 2    // 12
     第三個人的歲數 == 第二個人 + 2    // 14
     第四個人的歲數 == 第三個人 + 2    // 16
     第五個人的歲數 == 第四個人 + 2    // 18

     已知第一個人得年齡,和每個人之間的年齡差,求第n個人的年齡
     age(1) = 10
     age(2) = age (1) + 2
     age(3) = age (2) + 2
     age(4) = age (3) + 2
     
     age(n) = age(n-1) +2
     */
    
    int result = age(3);
    printf("result = %i\n",result);
    
    return 0;
}

int age(int n)  // 3
{
    if (n == 1) {
        return 10;  // 第一個人的年齡  ??
    }
    else
    {
        // return age(3 - 1) + 2;   == 12 + 2;
        // return age(2 - 1) + 2;   == 10 + 2;
        return age(n -1) + 2;
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容