老赵赶着鸭子去每个村庄卖,每经过一个村庄卖去所赶的鸭子的一半又一只,这样他经过了7个村庄后还剩n个鸭子,问他出发时有多少只鸭子?

运行结果及报错内容
#include <stdio.h>
#include "iostream"
using namespace std;
 
int number = 2,x,i=7;
 
int Number(int i)
{
    if(0 == i) //当i为0时,结束递归调用
    {
        cout << "他出发时共赶了" << number << "只鸭子。" << endl; //当经过的村子数为0时,number为出发时的鸭子数
    }
    else
    {
        number = (number + 1 ) * 2; //计算在经过第i个村子前的鸭子数number
        x = number / 2 + 1; //计算在经过第i 个村子时卖的鸭子数x
        cout << "经过第" << i << "个村子时,他卖出" << x << "只鸭子。" << endl;
        return Number(i - 1);
    }
}
int main()
{
    Number(7);
}


报错了Non-void function does not return a value in all control paths

我想要达到的结果

老赵赶着鸭子去每个村庄卖,每经过一个村庄卖去所赶的鸭子的一半又一只,这样他经过了7个村庄后还剩n个鸭子,问他出发时有多少只鸭子?


#include <stdio.h>
#include "iostream"
using namespace std;
int x;//多的全局变量删掉 
void f(int i,int num)//改成void 
{
    if(0 == i) //当i为0时,结束递归调用
    {
        cout << "他出发时共赶了" << num << "只鸭子。" << endl; //当经过的村子数为0时,num为出发时的鸭子数
    }
    else
    {
        num = (num + 1 ) * 2; //计算在经过第i个村子前的鸭子数num
        x = num / 2 + 1; //计算在经过第i 个村子时卖的鸭子数x
        cout << "经过第" << i << "个村子时,他卖出" << x << "只鸭子。" << endl;
        f(i - 1,num);//不用return 
    }
}
int main()
{
    int n;
    cin>>n; 
    f(7,n);
    return 0;
}

第11行错了,在递归调用的最后一层,没有返回值,应该加个return number ,在if(0 == i)这里面加

#include <stdio.h>
#include "iostream"
using namespace std;
 
int number = 2,x,i=7;
 
int Number(int i)
{
    if(0 == i) //当i为0时,结束递归调用
    {
        cout << "他出发时共赶了" << number << "只鸭子。" << endl; //当经过的村子数为0时,number为出发时的鸭子数
        return number;
    }
    else
    {
        number = (number + 1 ) * 2; //计算在经过第i个村子前的鸭子数number
        x = number / 2 + 1; //计算在经过第i 个村子时卖的鸭子数x
        cout << "经过第" << i << "个村子时,他卖出" << x << "只鸭子。" << endl;
        return Number(i - 1);
    }
}
int main()
{
    int a = Number(7);
     cout << "他出发时共赶了" << a<<"只鸭子";
}

img


修改见备注

#include <stdio.h>
#include "iostream"
using namespace std;
int x;//多的全局变量删掉 
void Number(int i,int number)//改成void 
{
    if(0 == i) //当i为0时,结束递归调用
    {
        cout << "他出发时共赶了" << number << "只鸭子。" << endl; //当经过的村子数为0时,number为出发时的鸭子数
    }
    else
    {
        number = (number + 1 ) * 2; //计算在经过第i个村子前的鸭子数number
        x = number / 2 + 1; //计算在经过第i 个村子时卖的鸭子数x
        cout << "经过第" << i << "个村子时,他卖出" << x << "只鸭子。" << endl;
        Number(i - 1,number);//不用return 
    }
}
int main()
{
    int n;
    cin>>n; 
    Number(7,n);
    return 0;
}
#include <stdio.h>
#include "iostream"
using namespace std;
//int number = 2, x, i = 7;//尽量不使用全局变量(以后开发中不建议)
void Number(int i, int number)//可以不返回int型,直接在该函数里输出;
{
    int x;//存放经过每个村子鸭子卖的数量
    if (i==0) //当i为0时,结束递归调用(递归出口条件)(尽量规范不要写成0==i)
    {
       cout << "出发时鸭子数量:" << number << endl;//当经过的村子数为0时,number为出发时的鸭子数
    }
    else
    {
        number = (number + 1) * 2; //计算在经过第i个村子前的鸭子数number
        x = number / 2 + 1; //计算在经过第i 个村子时卖的鸭子数x
        
        cout << "到第" << i << "个村子时,";
        cout << "鸭子数量为:" << number ;
         cout<<",他卖出:" << x << "只鸭子"<<endl;
         
        Number(i - 1, number);//再次调用直到i==0
    }
}
int main()
{
    int n;
    cin >> n;//键盘输入剩余鸭子数量,将其传入下行函数
    Number(7, n);//计算出发时的鸭子函数
    return 0;
}

img


#include <stdio.h>
#include "iostream"
using namespace std;

int number = 2, x, i = 7;

int Number(int i)
{
    if (0 == i) //当i为0时,结束递归调用
    {
        cout << "他出发时共赶了" << number << "只鸭子。" << endl;
        //当经过的村子数为0时,number为出发时的鸭子数
    }
    else
    {
        number = (number + 1) * 2; //计算在经过第i个村子前的鸭子数number
            x = number / 2 + 1; //计算在经过第i 个村子时卖的鸭子数x
        cout << "经过第" << i << "个村子时,他卖出" << x << "只鸭子。" << endl;
            return Number(i - 1);
    }
}
int main()
{
    Number(7);
}


我不认为你的有问题,你可以看看我的试试

#include <iostream>
using namespace std;
//利用递归求解
void Ideas(int Over_Sum,int Vi_Sum) {
    if (Vi_Sum == 1) {
        cout << "经过第" << Vi_Sum << "个村子时,他卖出" << Over_Sum + 2 << "只鸭子。" << endl;
        cout << "他出发时共赶了" << (Over_Sum + 1) * 2 << "只鸭子。" << endl;
    }
    else {
        cout << "经过第" << Vi_Sum << "个村子时,他卖出" << Over_Sum + 2 << "只鸭子。" << endl;
        Ideas((Over_Sum + 1) * 2, Vi_Sum - 1);
    }
}
int main() {
    int Init_Sum = 0;//初始鸭子总数
    int Village_Sum = 0;//村庄总数
    cin >> Init_Sum >> Village_Sum;//输入
    Ideas(Init_Sum, Village_Sum);
    return 0;
}

if(0 == i) //当i为0时,结束递归调用
    {
        cout << "他出发时共赶了" << num << "只鸭子。" << endl; //当经过的村子数为0时,num为出发时的鸭子数
}

这里需要写return返回值,其它都正确。

如有帮助,请采纳!