编写一个C-++程序来应用一个递归函数来计算一维数组中所有数字的频率。将介于0到99 之间的随机数生成为大小为100的数组。以大Oh表示法提供代码的复杂性。 步骤:a.为该数组分配随机数 b.计算数组中所有数字的频率 c.存储所有数字的频率 d.将频率从最小到最大进行排序。 e.显示每个数字及其频率。
时间: 2023-07-16 08:16:38 浏览: 137
以下是使用递归函数来计算一维数组中数字频率的C++程序:
```c++
#include <iostream>
#include <cstdlib>
#include <algorithm>
using namespace std;
void calculateFrequency(int arr[], int freq[], int i, int n) {
if(i == n) // base case
return;
freq[arr[i]]++; // increment frequency of current element
calculateFrequency(arr, freq, i+1, n); // recursive call for next element
}
void displayFrequency(int freq[]) {
cout << "Number\tFrequency" << endl;
for(int i=0; i<100; i++) {
if(freq[i] > 0) // display only if frequency is non-zero
cout << i << "\t" << freq[i] << endl;
}
}
int main() {
int arr[100];
int freq[100] = {0}; // initialize frequency array with zeros
// generate random numbers between 0 and 99 and store them in array
for(int i=0; i<100; i++) {
arr[i] = rand() % 100;
}
// calculate frequency of each element in array
calculateFrequency(arr, freq, 0, 100);
// sort frequency array in ascending order
sort(freq, freq+100);
// display frequency of each number in array
displayFrequency(freq);
return 0;
}
```
复杂性分析:
- 时间复杂度:递归函数 `calculateFrequency()` 会调用自身 `n` 次,其中 `n` 是数组的大小,因此时间复杂度为 O(n)。
- 空间复杂度:我们使用了大小为 100 的数组来存储随机数和数字频率,因此空间复杂度为 O(1)。
阅读全文