写出执行过程和结果例1 #include<iostream>using namespace std;void fun(int i){ if(i>0) fun(i/2); cout<<i<<endl; }int main( ){ fun(10); return 0;}
时间: 2024-10-15 22:09:56 浏览: 16
当运行这个程序时,它会按照以下步骤执行:
1. `main()` 函数启动,传入参数 `10`,调用 `fun(10)`。
2. 进入 `fun(10)` 函数,检查 `if (i > 0)` 条件,因为 `10` 大于 `0`,所以进入递归。
3. 首先计算 `i/2`,即 `10 / 2 = 5`,然后函数继续调用自身 `fun(5)`。
4. 接着进入 `fun(5)`,同样的递归逻辑,条件依然满足,调用 `fun(5/2)`,即 `fun(2)`。
5. 再次进入 `fun(2)`,再次检查条件,现在 `2 <= 0` 不成立了,因此执行 `cout << 2 << endl`,并返回上一级。
6. 回到 `fun(5)`,继续执行,输出 `2` 后,返回到 `fun(5)`。
7. `fun(5)` 输出 `5` 后,返回到 `fun(10)`。
8. 接下来 `fun(10)` 输出 `5`,然后再次执行 `fun(5/2)` 即 `fun(2)`。
9. 再次进入 `fun(2)`,输出 `1`,这次返回到 `fun(10)`。
10. 最终 `fun(10)` 输出 `1`,完成所有递归分支,结束当前 `fun(10)` 函数调用。
因此,程序执行结果将是:
```
10
5
2
1
```
这是递归地将 `10` 分成越来越小的数,直至达到基本情况 `1`,然后逐级恢复并打印出来。
相关问题
功能:有若干个数放入数组中,计算其中正数的平均值aver. C++函数。 #include <iostream> #include <fstream>using namespace std;double fun(int a[10]);void mainO) int a[10]; double av; for(int i=0;i<10;i++) cin>>a[i]; av=fun(a); cout<<av<<endl; double fun(int a[10])
代码如下:
```c++
#include <iostream>
using namespace std;
double fun(int a[10])
{
int count = 0; // 统计正数个数
int sum = 0; // 正数和
for (int i = 0; i < 10; i++) {
if (a[i] > 0) {
count++;
sum += a[i];
}
}
return (double)sum / count;
}
int main()
{
int a[10];
double av;
for(int i=0;i<10;i++)
cin>>a[i];
av = fun(a);
cout<<av<<endl;
return 0;
}
```
函数 `fun` 的作用是计算数组中正数的平均值。首先定义变量 `count` 和 `sum` 分别用于统计正数个数和正数和。然后遍历数组,如果当前元素是正数,就将 `count` 加 1,将 `sum` 加上当前元素的值。最后返回 `sum` 除以 `count` 的结果即可得到正数的平均值。
在主函数中,先读入数组的值,然后调用 `fun` 函数计算平均值,并将结果输出。
#include <iostream> using namespace std; int fun( char *s) { char* p = s; while (*p != '\0') p++; return (*p - s); } void main() { cout << fun("abc") << endl; }
这段代码与前面的代码功能相同,都是计算字符串 "abc" 的长度,输出结果为 3。但是这段代码的参数类型是 char*,而不是 char[],它们虽然看起来很像,但是实际上有些细微的差别。char[] 表示一个字符数组,它是一个固定长度的数组,在传递给函数时会被自动转换为指向数组首元素的指针,因此使用 char[] 和 char* 是等效的。而 char* 表示一个指向字符的指针,它可以指向任何长度的字符串,包括空字符串。因此,使用 char* 更加灵活,可以适用于不同长度的字符串。
阅读全文