1. 程式人生 > 實用技巧 >遞迴計算陣列中元素和

遞迴計算陣列中元素和

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

/*************************************
 *         遞迴計算陣列元素和
 *
**************************************/

int arr[] = { 2, 46, -1, 3 };

int sum(int* arr)
{
    if (sizeof(arr) / sizeof(int) == 1)  //錯誤,當傳入陣列名時,實際上就是一個指向陣列首元素的指標而已,sizeof不能得到陣列長度
return *arr; return arr[0] + sum(++arr); } int sum2(int* arr, int* size) { if (*size == 1) return *arr; (*size)--; return arr[0] + sum2(&arr[1], size); } void main() { int size = sizeof(arr) / sizeof(int); int res = sum2(arr, &size); system("pause"
); }

通常情況下,一聽到計算陣列中元素和大多數人應該都是會想到for迴圈,是的,for迴圈是應該不錯的解決方案,博主也是屢試不爽;

不過今天簡單使用遞迴的方式實現了一下,這裡有兩個知識點,一是 陣列名作為引數傳入函式後為一個指向陣列首元素的普通指標,二是 該指標並不是陣列名,只是儲存了

陣列首元素的地址而已,所以sum2中使用arr++並不會影響arr全域性陣列