こちらの問題の解答コード(以下に載せました)で再帰関数の基本を学びたいのですが再帰関数を解説してるブログを見ても理解できません。。
######質問内容
.if (x==1) return 1;
というのがベースケース、return f(x/2)*2+1;
が再帰ステップと呼ばれるものだと思うのですが再帰関数の解説ブログには異口同音に「再帰ステップでの再帰呼び出しが最終的にベースケースに到達する」と書いてあります。今回例えばxに19という数字を入れたときにどういう流れを経てx==1
に辿り着くのか詳細に教えてくださると嬉しいです。自分はxに19を与える→x!=1だからf(x/2)*2+1
に放り込まれる→f(9)*2+1を返す(どこに?)ぐらいで理解が止まっています。よろしくお願い致します。
#include <bits/stdc++.h> using namespace std; long long f(long long x) { if (x==1) return 1; return f(x/2)*2+1; } int main(){ long long h; cin >> h; cout << f(h) << endl; return 0; }
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/24 08:37