我做了一個代碼來解決一個問題。 這是問題的鏈接:https://brilliant.org/practice/bijections-overview/?p=2。 我的意見是使用遞回。我有3個元素要加到5,我把單個元素從0到5進行迭代,如此反復。
這是我的代碼:
#include<bit/stdc .h>/span>
using namespace std;
int count_sum_5(int sum, int n)
{
if(n == 1) return 1;
for(int i = 0; i <= sum ; i ){
return 1 count_sum_5(sum - i, n - 1);
}
}
int main()
{
int sum = 5;
int count_ele = 3;
cout << count_sum_5(sum, count_ele)。
它的輸出是3,我認為它只在i = 0上運行,但在i = 1, 2, 3, 4, 5上不運行。你能幫助我嗎?
uj5u.com熱心網友回復:
return評估了1 count_sum_5(sum - i, n - 1),然后立即退出整個函式,在回圈的第一個迭代。從一個函式中多次回傳是不可能的。
uj5u.com熱心網友回復:
我不知道你到底想用這個來解決什么問題。但是For回圈將只運行一次i=0,因為一旦它評估了1 count_sum(sum-i, n-1),它將回傳它。
然而,你可以做以下的改變:
#include<bit/stdc .h>
using namespace std;
int count_sum_5(int sum, int n)
{
if(n == 1) return 1;
int temp = 0;
for(int i = 0; i <= sum ; i ){
temp = (1 count_sum_5(sum - i, n - 1) 。)
}
return temp;
}
int main()
{
int sum = 5
int count_ele = 3;
cout << count_sum_5(sum, count_ele)。
uj5u.com熱心網友回復:
如果n是1,你的函式將回傳1,否則它將進入for回圈,這將回傳第一次迭代的值。你分別通過傳遞5和3來呼叫你的函式。
第一次呼叫
第一次呼叫:它回傳 1 count_sum_5(5, 2) 第二次呼叫:回傳 1 count_sum_5(5, 1) 。
第三次呼叫:它回傳1 因此,第二次呼叫將評估為1 1 = 2,然后第二次呼叫將評估為1 2 = 3。我不確定你的意圖是什么,但是你的遞回不需要 我不確定你是否對此感到滿意。如果不滿意,那么請讓我知道你打算實作什么,樣本輸入和輸出會有幫助。如果你提供進一步的資訊,那么我將相應地編輯我的答案。
標籤:for回圈。你的函式相當于int count_sum_5(int sum, int n)
{
if(n == 1) return 1;
return 1 count_sum_5(sum, n - 1)。
