遞迴計算陣列中元素和
阿新 • • 發佈:2020-07-06
#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全域性陣列